パススラッシュ後のBash支柱の拡張

パススラッシュ後のBash支柱の拡張

中かっこ拡張を使用して、異なる名前のファイルを同じディレクトリにコピーしようとしています。私はbash 4.4.18を使用しています。

これが私がしたことです:

cp ~/some/dir/{my-file-to-rename.bin, new-name-of-file.bin}

ただし、次のエラーが発生します。

cp: cannot stat '/home/xyz/some/dir/{my-file-to-rename.bin,': No such file or directory

このような単純な中括弧拡張にも同じエラーが発生します。

cp {my-file-to-rename.bin, new-name-of-file.bin}

私は何が間違っていましたか?

ベストアンサー1

これ支柱の拡張構文にはカンマは使用できますが、コンマの後のスペースは使用できません。多くのプログラミング言語では、カンマの後のスペースは一般的ですが、ここではそうではありません。 Bashでは、引用符で囲まれていない空白がある場合、中括弧の拡張は行われません。

スペースを削除してください。

cp ~/some/dir/{my-file-to-rename.bin,new-name-of-file.bin}

完全に不要ですが、末尾を中.binかっこの外に移動できます。

cp ~/some/dir/{my-file-to-rename,new-name-of-file}.bin

支柱の拡張効果をテストするには、echoまたはprintf '%s '、またはを使用できます。printfこれを行うには、目的の書式文字列を使用してください。 (個人的にechoBashにいるときにこれを使用する理由は次のとおりです。バッシュecho内蔵エスケープシーケンスはデフォルトでは拡張されていないため、実行された実際のコマンドを調べるのに理想的です。 )例えば:

ek@Io:~$ echo cp ~/some/dir/{my-file-to-rename,new-name-of-file}.bin
cp /home/ek/some/dir/my-file-to-rename.bin /home/ek/some/dir/new-name-of-file.bin

おすすめ記事