Bashスクリプトで次のコマンドを実行したいが、うまくいきません。
注文する:
cp /tmp/first/{abc.conf,xyz.conf} /tmp/backup/
バッシュスクリプト:
firstDir=/tmp/first
#secondDir=/tmp/second
validDir=$firstDir
#validDir=$secondDir
backupDir=/tmp/backup
files='{abc.conf,xyz.conf}'
join=$firstDir/$files
#join=$secondDir/$files
cp $join $backupDir
exit 0
rm -rf $validDir
mkdir $validDir
cp ("$backupDir/*.conf") $validDir
間違い:
cp: cannot stat '/tmp/first/{abc.conf,xyz.conf}': No such file or directory
目標は、ディレクトリをクリーンアップし、この2つのファイルのみを再配置することです。
答え1
サポート拡張発生する今後パラメータが拡張されたため
files='{abc.conf,xyz.conf}'
join=$firstDir/$files
結果は実際に変数をに設定し、/tmp/first/{abc.conf,xyz.conf}
コマンドから展開したときに再処理されませんcp
。
代わりに、次のように書くことができます。
cp "$firstDir"/{abc.conf,xyz.conf} "$backupDir"
文字通り、好きなように拡張されます。
変数に対して中括弧拡張を強制する方法はありませんが、配列を使用してファイル名とコマンドを分離するか、中括弧拡張を使用して定義することもできます。
files=( "$firstDir"/{abc.conf,xyz.conf} )
次に${files[@]}
。