
$ rm Think\ Python:\ How\ to\ Think\ Like\ a\ Computer
\ Scientist\ 2014.pdf
rm: cannot remove ‘Think Python: How to Think Like a Computer’: No such file or directory
$ Scientist 2014.pdf: command not found
$ rm Think*
$
最初は、rm
bashでオートコンプリートを使用して名前に改行文字を含むファイルを指定しましたが、改行文字のために機能しませんでした。
2番目は、rm
改行文字を明示的に指定しないようにファイル拡張子を使用しました。ファイル拡張子がこの問題を回避できるのはなぜですか?ファイル拡張子が改行文字を含む完全なファイル名には拡張されませんか?
答え1
\n で終わるファイルの rm の場合、rm file*
正規表現ファイル拡張子は rm 引数の一部として改行を「食べる」ため、シェルはこれを見ず、コマンドで解析しません。
straceに見られるように:
$strace rm teste.txt*
execve("/bin/rm", ["rm", "teste.txt\n"],
事前定義されたルールセットに従うオートコンプリートの場合、実際には '\n' は必要ありません。