(3つの回答)
6年前に閉鎖されました。
検索コマンドがあります:
find Directory/{Alpha,Bravo,Charlie} arg1 arg2
Alpha,Bravo,Charlie
を置き換えたい $find_dir
を使用
find Directory/{$find_dir} arg1 arg2
ただし、後者はに拡張されます
find Directory/{Alpha,Bravo,Charlie} arg1 arg2
むしろ
find Directory/Alpha Directory/Bravo Directory/Charlie arg1 arg2
なんで?これはかなり複雑なbashスクリプトの一部であり、ディレクトリが多かれ少なかれ含まれている可能性がありますが、すべてが関連しているわけではありません(したがって、Upload / *のグロビングは機能しません)。したがって、ここで3つセットアップして別のセットアップを行う場合は、後で手動で追加する必要があります。さらに、検索出力の観点を維持するために、ディレクトリのルートから実行する必要があります(./Dir/fileではなく./Upload/Dir/file)。
ただし、変数を使用すると、必要に応じて変数を変更し、スクリプトの他の部分との関連性を保つことができます。
承認された回答:
bash
から ドキュメント、ブレース拡張セクション:
中括弧の拡張は他の拡張の前に実行され、
他の拡張に固有の文字は結果に保持されます 。
厳密にテキストです。 Bashは、拡張のコンテキストまたは中括弧の間のテキストに構文上の解釈を適用しません。
パラメータ拡張との競合を回避するために、文字列「${」は
中括弧拡張の対象とは見なされません。
bash
の別のメモ :
展開の順序は、ブレース展開、チルダ展開、
パラメーター、変数、算術展開、およびコマンド置換(左から右に実行)です。 、単語分割、ファイル名
展開。
したがって、あなたの場合、bash
見た 変数展開の前にブレース展開を実行します。最初にブレース展開を実行し、結果を生成します{Alpha,Bravo,Charlie}
。
$find_dir
を制御できる場合 可変コンテンツの場合、eval
を使用できます :
eval "find Directory/{$find_dir} arg1 arg2"