私はbashスクリプト内から、コマンドラインで変数でbash拡張ワイルドカードを作成する方法は?
mv ./images/*.{pdf,eps,jpg,svg} ./images/junk/
を入力するのと同じ効果を達成しようとしています。私が持っている:
実行し、MYDIR="./images"
OTHERDIR="./images/junk"
SUFFIXES='{pdf,eps,jpg,svg}'
mv "$MYDIR/"*.$SUFFIXES "$OTHERDIR/"
を、予期しないエラーがないを与える:
mv: rename ./images/*.{pdf,eps,jpg,svg} to ./images/junk/*.{pdf,eps,jpg,svg}:
No such file or directory
mv
が実際に必要な拡張を行いますように、このすべてを引用するための正しい方法は何ですか? (はい、./images/
内のパターンに一致するファイルの多くがあります。)
+1、きちんとしたトリック、 '@()'について知らなかった、新しいことを学んだ。 (?)パターン、 '*()'パターン、 '+()'パターン、 '@()'パターン、 '!()'パターンがあるのを知っている方はマンページで調べてみてください。 'extglob'が有効な場合はすべて利用可能です。 – falstro
素晴らしい、ありがとう!シェルスクリプトの引用と展開は常に問題を引き起こしますが、これは大いに役立ちます。 –
@RossDuncan、私はhttp://mywiki.wooledge.org/BashParserを、シェルの実行モデルに関係するフェーズや、どのような順番で起きているかについての良い参照をする場所として提案したいと思います。 –