ソリューション
配列として"[email protected]"
変数を格納するためには、あなたは配列リテラルの場合と同じよう()
でそれをラップする必要があります。
#!/bin/bash
declare -ar Args=("[email protected]");
for arg in "${Args[@]}"; do
echo "${arg}";
done;
出力例は:
$ /home/jason/bourne --help memory "quoted phrase";
--help
memory
quoted phrase
は注:[email protected]
は常には""
でラップする必要があります。 (おそらくこのルールには例外がありますが、少なくとも99.9%の時間を守る必要があります)この場合、("[email protected]")
ではなく([email protected])
を使用してください。
説明
bashで最初から配列リテラルを作成するには、あなたがこれを行うだろう:
declare -ar array=("a" "b" "c d");
"[email protected]"
変数は引用符で包まれた各文字列と文字列のリストに展開されます。 ()
でこのリストをラップすると、bash配列に変換されます。例えば
declare -ar array=("[email protected]");
"[email protected]"
が"a" "b" "c d"
に展開ならば、その後、("[email protected]")
は("a" "b" "c d")
になります。
"[email protected]" == "a" "b" "c d"
("[email protected]") == ("a" "b" "c d")
例
ここ側コード例による側です。
#!/bin/bash
declare -ar array=("[email protected]");
for val in "${array[@]}"; do
echo "${val}";
done;
が出力されます。この:
#!/bin/bash
declare -ar array=("a" "b" "c d");
for val in "${array[@]}"; do
echo "${val}";
done;
意志の出力と同じこと:
$ /home/jason/bourne "a" "b" "c d";
a
b
c d
はこれに/home/jason/bourne
スクリプトを設定し、これに/home/jason/bourne
スクリプトの設定
$ /home/jason/bourne;
a
b
c d
'(...)'は展開に全く関与していないことに注意してください。 '' $ @ ''は配列*の中の*(*)の中に展開され、'(...) 'の内容は配列パラメータの要素として割り当てられます。 – chepner
@chepner '' $ @ "'の代わりに '$ @'を使うのは間違いです。他の人が同じミスをしないように、私はそれを指摘するための注釈を追加しました。 – GreenRaccoon23