私が変数filenames
とchoices
に割り当てた値に応じて、あなたが提示したコードを出力するかどうかを指定できます。
まず、私はbashが索引付け観察アレイはから始まるインデックスを付け、ないれます。値1
と2
を配列filenames
のインデックスとして使用し、2つの要素のみを持つインデックス付き配列の場合は、${filenames[2]}
が何も展開されていない可能性があります。あなたはそのようfilenames
を初期化する場合、これは、結果、次のようになります。
代わり
# NOT WHAT YOU WANT:
filenames=(A B)
、個別に配列要素を割り当てる、またはインデックス0でダミーの値を追加し、次のいずれか
# Could work:
filenames=('' A B)
次に、私はの不審なよchoices
。あなたは配列でプレーしているので、私はあなたがそうのように、配列としてchoices
を初期化している可能性があることを推測:
# NOT CONSISTENT WITH YOUR LATER USAGE:
choices=(1 2)
インデックスを指定せずに配列値の変数を展開する場合は、インデックスを指定したかのように、それはあります0
。上記の初期化では、$choices
は、1
に拡張されます。1 2
ではなく、フラットな文字列としてchoices
を初期化し、次のいずれか:
# Could work:
choices='1 2'
または異なって、それを展開します。
# or expand it this way:
for i in "${choices[@]}"
2つの可能性があります。ところで、見積もりを見落としてはいけません。その特定のフォームは配列要素ごとに1語に拡張されますが、引用符を除いて配列要素は単語分割やその他の拡張が行われます(ただし、使用している特定の値この場合)。
引用は、一般にecho
コマンドにも適用されます。拡張を引用しない場合は、すべてのケースで意図したとおりに行うと確信するためにコードをさらに慎重に分析する必要があります。単語の分割だけでなく、パス名の拡張や他のいくつかの対象になります。あなたの場合、作業ディレクトリ(thanks @CharlesDuffy)にあるファイルの名前に応じて、パス名拡張を実行する可能性があります。 farただ引用するだけで安全です。
とにかく、ここで完全なデモンストレーション逐語的にあなたのコードを組み込むとしたい出力を生成します:
#!/bin/bash
filenames=('' 'A' 'B')
choices="1 2"
selections=()
for i in $choices
do
selections+=("role[${filenames[$i]}]")
done
echo ${selections[@]}
# better:
# echo "${selections[@]}"
出力:
役割[A]ロール[B]
最後に、私がコメントで見たように、あなたが持っていると主張する入力(変数値)を考えれば、あなたのコードが "役割"を出力する方法はありません。それが実際にあなたが見ているものであれば、あなたが提示したコードには関連していないか、入力があなたと異なるものです。
これは動作するはずです。完全なコードを表示できますか? – anubhava
申し訳ありませんが、申し立ては信頼できません。あなたのコードが出力として 'roles'を生成する方法はありません。たぶんそれはちょうど 'ロール[A]'を生成するでしょうか?それ以外の場合は、表示されている出力は、あなたが提示したコードによって生成されていません。 –
@ JohnBollinger、それは実際に信頼できる。 glob展開を考えてみましょう。結果として 'role [abcs]'があり、 'roles'がディスクに存在する場合、' rolea'や 'roleb'に展開できるのと同じように' roles'に展開することができます。 –