使いたいソート私のシェンスクリプト。
私の目標は、値を含む配列を作成し、a b c
配列のすべての値を印刷することです。
各配列を正常に印刷しましたが、配列のすべての値を印刷できませんでした。
以下の例:
arrに各値を設定します。:
n=1
eval arr$n=a
n=2
eval arr$n=b
n=3
eval arr$n=c
arr の各値を印刷します。:
n=1
eval echo \$arr$n
a
n=2
eval echo \$arr$n
b
n=3
eval echo \$arr$n
c
今、すべての値を印刷したいと思います。$arr
代わりに、a b c
次のようになります。
n="*"
eval echo \$arr$n
{*}*
値はでなければなりませんa b c
。
ベストアンサー1
少し遅れましたが、sh
ここでは理想的な回答が見つかりませんので回答いたします。サブスクリプションが必要ない場合はsh
有効です。する配列をサポートします。スペースで区切られた文字列としてのみサポートされます。内容全体を印刷、「プッシュ」、または繰り返すことができます。
以下はいくつかのサンプルコードです。
NAMES=""
NAMES="${NAMES} MYNAME"
NAMES="${NAMES} YOURNAME"
NAMES="${NAMES} THEIRNAME"
echo 'One at a time...'
for NAME in ${NAMES}; do
echo ${NAME};
done
echo 'All together now!'
echo ${NAMES}
任意の出力:
One at a time...
MYNAME
YOURNAME
THEIRNAME
All together now!
MYNAME YOURNAME THEIRNAME
私は下付き文字をサポートしていないと言っていますが、いくつかのcut
魔法と適切な区切り文字でスペースを使用すると、確かにエミュレートできます。上記の例の下部にこれを追加すると:
echo 'Get the second one'
echo ${NAMES} | cut -d' ' -f2
echo 'Add one more...'
NAMES="${NAMES} TOM"
echo 'Grab the third one'
echo ${NAMES} | cut -d' ' -f3
これを実行すると、次のような結果が得られます。
Get the second one
YOURNAME
Add one more...
Grab the third one
THEIRNAME
これがまさに私たちが期待したものです!
ただし、スペースを含む文字列は問題を引き起こし、下付き文字を完全に破棄する可能性があります。
したがって、より良い表現は、配列が明確ではなく、sh
空白のある文字列配列を処理するのが難しいということです。これを行う必要がない場合(たとえば、デプロイしたいホスト名の配列など)、これはsh
まだ良いツールです。