初歩のシェルスクリプトで遊ぶ[シェルスクリプトの注意点はどこだろう(2)]
シェル変数は手書きノートをイメージする
#!/bin/sh # シェル変数は手書きノートのようなもの # シェル変数には改行込みで文字を格納できる var='aaaa bbbb cccc' # 区切り文字を含めて文字を格納できる foo='1 あああ 2 いいい 3 ううう' # 改行を含めてechoできる echo "${var}" # 区切り文字を含めてechoできる # コマンドに繋げることができる echo "${foo}" | cut -f 2
・実行結果
aaaa bbbb cccc あああ いいい ううう
区切り文字にタブなどを無理なく使えるなら、シェル変数をデータごとに分けるより、まとめたほうが簡単になる場合がしばしばありました。
ノートの1ページくらいをイメージすると、無理がありません。量が膨大でないなら、改行もそのまま、まとめて引数ひとつでデータを渡せて簡単です。
多少のデータの増減があっても、単純に文字数を増減させるだけで済みます。
#!/bin/sh # # 区切り文字を含めて文字を格納できる foo='1 あああ 2 いいい 3 ううう' # 複数のデータをひとつのシェル変数に入れることができる。 # シェル関数にデータを渡すときも、小さいデータなら引数ひとつで十分に渡せる。 echoFunc(){ echo "${1}" } echoFunc "${foo}"
・実行結果
1 あああ 2 いいい 3 ううう
今回は説得力のある例を思い出せないので簡単に済ませますが、たとえばbashの配列との使い分けのときに検討する必要があります。
複数のデータをシェル変数に入れて処理したいとき、「今回はbashの配列を使って簡単に済ませてしまおう」と思って配列にしたのに、かえって面倒になったこともありました。
末尾の改行には注意が必要
コマンド置換でシェル変数にデータを格納すると、末尾の連続した改行は、まとめて自動的に削られます。
シェル変数に入れておく行数が大事なときは、うっかりミスの原因になります。