2017-10-04 18 views
1

私はさまざまなユーザーとパスワードを作成するbashスクリプトを持っています。パスワードとユーザーは変数に格納されます。タブはハードコードされているのでbashで動的テーブルを作成する

+---------------------------------------+ 
| Linux Logins       | 
+---------------+-----------------------+ 
| User   | Password    | 
+---------------+-----------------------+ 
| michael   | helolopk8712t76    | 
+---------------+-----------------------+ 

これは:

cat << EOT 
+---------------------------------------+ 
| Linux Logins       | 
+---------------+-----------------------+ 
| User   | Password    | 
+---------------+-----------------------+ 
| $test  | $testpw    | 
+---------------+-----------------------+ 

EOT 

これに伴う問題は、格納された変数の長さに応じて、テーブルが次のように台無しにされることをです。これをどうやって解決できますか?私はそれを行うawkとカラムがあることを知っています。 可能ならば、mysql consoleのように動的にしたいです。

+1

私はこれはここでは可能ではないと信じています。おそらく、行く方法は、[printfのパディング文字](https://stackoverflow.com/q/4409399/1983854) – fedorqui

答えて

2

後、私はあなたがする意味を考えるTRUNCするでパディングすることができますあなたの問題は、あなたのタブがではないという事実のためです。 ha rdcoded。しかしタブは、あなたが望むことを実行するのに十分な柔軟性はありません。あなたはできます:

cat << EOT    
+---------------------------------------+    
| Linux Logins       |    
+---------------+-----------------------+    
| User   | Password    |    
+---------------+-----------------------+    
| $(printf %-14s "$test")| $(printf %-22s "$testpw")|   
+---------------+-----------------------+    

EOT 
+0

@patrick_で説明されているように 'printf'を使うことです。関数からカットアンドペーストしました。 '$ test'と' $ testpw'の代わりに '$ 1'と' $ 2'を使っていました。私は関数定義で元の答えを残しておくべきでした! –

+0

ありがとうございますこれは22文字までのパスワードで動作するようです。 22以上の文字は現実的ではないので、このソリューションは完璧に機能します。どうもありがとうございました。 –

+0

も ​​'printf -v'で行うことができます。これは、より効率的です –

1

変数は、printfの

printf -v test %20s "$test" 
printf -v testpw %20s "$testpw" 

または左揃えのため

printf -v test %-20s "$test" 
printf -v testpw %-20s "$testpw" 

または特定の長さ(19)

printf -v test %-20.19s "$test" 
printf -v testpw %-20.19s "$testpw" 
関連する問題