bashスクリプトでは、cp複数のファイルが機能しません。

bashスクリプトでは、cp複数のファイルが機能しません。

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[@]}

関連情報