
シェル スクリプトに、$a、$b、$c などの順序で並べた変数のリストがあります。すべての変数をリストせずに、これらの変数を印刷したいと思います。現在のコードは次のとおりです。
a=1
b=2
c=3
d=4
e=5
f=6
g=7
for x in $a$b$c$d$e$f$g
do
echo "$x"
done
$a$b$c$d$e$f$g を $a から $g までを指すものに短縮できますか?
答え1
「邪悪」の使用eval
:
eval echo \"$(printf '$%s' {a..g})\"
変数にスペース文字が含まれている場合に正しい出力を得るために必要なエスケープ引用符を使用していることに注意してください。
または、修正されたforループを使用して最初の答え:
for x in {a..g}; do printf "${!x}"; done
または、スクリプトで配列を使用します。これは異なる構文ですが、一度にすべての値が必要な場合に扱いやすくなります。次に小さな例を示します。
array=(1 2 3 4 x 6)
array+=(7) # add one more
array[4]=5 # modify element at index 4
printf '%s' "${array[@]}"
最後の 2 つのprintf
ステートメントは改行で終わらないことに注意してください。