サポート拡張が機能しません

サポート拡張が機能しません

-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

ただ変更しprintfset --使用してください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

関連情報