初歩のシェルスクリプトで遊ぶ[シェルスクリプトの注意点はどこだろう(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の配列を使って簡単に済ませてしまおう」と思って配列にしたのに、かえって面倒になったこともありました。

末尾の改行には注意が必要

コマンド置換でシェル変数にデータを格納すると、末尾の連続した改行は、まとめて自動的に削られます。
シェル変数に入れておく行数が大事なときは、うっかりミスの原因になります。