-
Bashからプレフィックスまで削除するようにファイル名を変更したいのですが、中かっこ拡張では機能しないのはなぜですか?
$ ls
Thomas Anderson, Michael Dahlin-Operating Systems
$ mv {Thomas\ Anderson,\ Michael\ Dahlin-,}Operating\ Systems
mv: target ‘Operating Systems’ is not a directory
答え1
ファイルには,
キャリブレータ拡張に関する固有の内容が含まれているため、キャリブレータ拡張は次に拡張されます。サム目的の2つではなく文字列です。
あなたは試すことができます:
$ printf '%s\n' {Thomas\ Anderson,\ Michael\ Dahlin-,}Operating\ Systems
Thomas AndersonOperating Systems
Michael Dahlin-Operating Systems
Operating Systems
支柱の拡張がどのように拡張されるかを確認してください。
迅速な修正は脱出することです,
。
$ printf '%s\n' {Thomas\ Anderson\,\ Michael\ Dahlin-,}Operating\ Systems
Thomas Anderson, Michael Dahlin-Operating Systems
Operating Systems
答え2
おそらく最も簡単な方法はとをprintf
使用することですset --
。
ショートバージョン:
$ set -- {"Thomas Anderson, Michael Dahlin-",}"Operating Systems"
$ mv "$@"
$ ls
Operating Systems
またはより詳細な説明:望むものではないことがわかりました。
$ printf '%s\n' {Thomas\ Anderson,\ Michael\ Dahlin-,}Operating\ Systems
Thomas AndersonOperating Systems
Michael Dahlin-Operating Systems
Operating Systems
あなたが望むようになったとき(引用が最も簡単な方法です):
$ printf '%s\n' {"Thomas Anderson, Michael Dahlin-",}"Operating Systems"
Thomas Anderson, Michael Dahlin-Operating Systems
Operating Systems
ただ変更しprintf
てset --
使用してくださいmv "$@"
$ mkdir mydir
$ cd mydir
$ touch 'Thomas Anderson, Michael Dahlin-Operating Systems'
$ ls
Thomas Anderson, Michael Dahlin-Operating Systems
$ printf '%s\n' {"Thomas Anderson, Michael Dahlin-",}"Operating Systems"
Thomas Anderson, Michael Dahlin-
Operating Systems
$ set -- {"Thomas Anderson, Michael Dahlin-",}"Operating Systems"
$ printf '%s\n' "$@"
Thomas Anderson, Michael Dahlin-
Operating Systems
$ mv "$@"
$ ls
Operating Systems