foreach を使用して a_condition* と一致するサブフォルダー名を検索すると、次のように正常に機能します。
foreach i (a_condition*)
echo $i
end
a_condition1 a_condition2...を印刷します。
しかし、a_conditon*をハードコーディングせずに試してみると、次のようになります。
set condition = a_condition*
foreach i ($condition)
echo $i
end
最初の値のみを印刷します。なぜこれが起こるのですか?
答え1
csh
私が知っているすべての実装/バージョンで:
set condition = a_condition*
同じです:
set condition = (a_condition*)
つまり、glob拡張によるすべてのファイル名を含む配列を作成しますa_condition*
。 PDP11エミュレータの2BSDで元々1979年の実装を確認しましたが、csh
結果は同じでした。
あなたが説明する動作は、行が次のように解釈されるように見えます。
set condition = a_condition1 a_condition2 a_condition3...
つまり、condition
値を持つ変数とa_condition1
名前付き変数をa_condition2
定義しますa_condition3
。同様の動作を持つ実装は認識されず、元の実装のcsh
ようにそのような実装が存在する可能性はほとんどありません。いいえ、そうであれば試してみてください。これ:
set condition = (a_condition*)
これが変化をもたらすことを確認してください。これもより自己説明的です。
とにかく、割り当て時にグローブを拡張し、ループが要素を繰り返すようにするには、構文は次のとおりです。
set condition = (a_condition*)
foreach i ($condition:q)
echo $i:q
end
condition
含めたい場合a_condition*
ひもそして、文字列は反復中にglobに展開されます。つまり:
set condition = 'a_condition*'
foreach i ($condition)
echo $i:q
end