サブシェルでls * .txtを実行できないのはなぜですか?


13
~$ echo $(ls)  
arguments.txt cecho.sh Desktop Documents Downloads example.txt Music Pictures Public     
~$ echo $(ls "*.txt")  
ls: cannot access *.txt: No such file or directory  

2番目のサブシェルコマンドが失敗するのはなぜですか?

回答:


27

引用符を削除する*.txtと、動作するはずです。引用符でシェルはリテラルfilenameを探します*.txt。探索/実験するには、名前を付け*.txtてファイルを作成しtouch '*.txt'、コマンドを繰り返してみてください。


6
二重引用符(少なくとものbashような類似のシェルzsh)は、単一引用符と同じではないことに注意してください!たとえば、パラメーター展開($foo)は二重引用符で囲まれていますが、単一引用符では囲まれていません。
ブラックライトシャイニング14

30

ls "*.txt"通常のシェルで実行できないのと同じように、サブシェルでも実行できません。あなたが入れた場合*.txt、引用符で、あなたが作っls呼ばれる文字通りのファイルを検索*.txtしますが、これをやるべき時に代わりに:

$ echo $(ls *.txt) # => file.txt otherfile.txt

これを行うより良い方法は、まったく使用lsしないことです。

$ echo *.txt # => file.txt otherfile.txt

7
冗長なを削除するための+1 ls
ブラックライトシャイニング14

3
Nitpicking:実行できますls -l "*.txt"。または少なくともできる。私は頻繁にそれをしませんが、私がそうするとき、それは通常* .txtを見つけることができなかったことを教えてくれます...
Ingo 14

@lngo:それもOPの投稿にあります
ブライアン14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.