5

次のスクリプトがあるとします。

#!/bin/bash

asteriskFiles=("sip.conf" "extensions.conf")

for asteriskFile in $asteriskFiles
do
    # backup current configuration file
    cp somepath/${asteriskFile} test/
    echo "test"
done

これにより、出力「test」が1回だけ得られるため、ループは2回ではなく1回だけ実行されます(asteriskFiles配列の2つのエントリ)。私は何が間違っているのですか?ヒントをありがとう!

4

3 に答える 3

11

実例:

$ asteriskFiles=("sip.conf" "extensions.conf")
$ echo $asteriskFiles # is equivalent to echo ${asteriskFiles[0]}
sip.conf
$ echo "${asteriskFiles[@]}"
sip.conf extensions.conf

引用符が重要であることに注意してください。echo ${asteriskFiles[@]}動作しているように見えるかもしれませんが、ファイルのいずれかに空白が含まれていると、bash は空白で単語分割されます。

于 2012-07-09T19:24:08.783 に答える
2

このようにループの先頭を書きます

for asteriskFile in "${asteriskFiles[@]}"
于 2012-07-09T19:31:51.730 に答える
2

プローブ

asteriskFiles変数は配列を保持します。スカラーのように逆参照すると、配列の最初の要素のみが取得されます。

ソリューション

正しいシェル パラメーター展開を使用して、すべての添え字要素にアクセスしたいと考えています。例えば:

$ echo "${asteriskFiles[@]}"
sip.conf extensions.conf

@ 添え字 (正しく引用されている場合) は、配列の適切にトークン化された要素に展開され、for ループが反復処理できるようになります。

于 2012-07-09T19:31:54.163 に答える