看板 Linux 關於我們 聯絡資訊
承上, 感謝CP64的解說,所以說萬用字元*會在有參數的script執行中轉譯2次? 接下來就跟萬用字元有關的問題,如下圖: ls c* 就是列出 c開頭的檔案,所以得到 cccc. command.sss ls c\* 因為*被 \ escape掉了,所以列出叫 c* 的檔案,但是沒有叫 c* 的檔案, 所以顯示 c*: No such file or directory find . -name c\* 應該也要顯示 No such file or directory ? 為何可以找到./cccc. ./command.sss http://i65ynb.2fh.co/pics/wildc.jpg
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.61.219.121 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1444568791.A.FCF.html
bibo9901: 因為find也把 '*' 當作 wildcard 10/11 21:19
zi98btcc: find . -name c\* 也有escape呀! 比較 ls c\* 10/11 21:22
CP64: 因為 find 最後吃到的還是 c* 10/11 21:58
CP64: 如果你資料夾底下有 ca cb cc 3個檔案 10/11 21:59
zi98btcc: 為何 ls c\* 就不一樣? 10/11 21:59
CP64: 因為它是 find 10/11 21:59
CP64: 前面說有那3個檔案時 你執行 ls c* 會被變成 ls ca cb cc 10/11 22:00
CP64: 執行 ls c\* 實際執行的是 ls c* 10/11 22:01
CP64: 然後 find 本身會拿 -name 後面拿到的字串做 wildcard 比對 10/11 22:02
zi98btcc: 普遍來說,ls c\* 是特例,還是 find c\*是特例? 10/11 22:06
CP64: 個人觀點是 find c\* 10/11 22:07
CP64: 因為不是每隻程式都會把吃進來的*再轉譯一次 10/11 22:07
CP64: 啊 但是 find 只有 -name 後面的參數才會喔 10/11 22:10
zi98btcc: 真是的,被這些'棉棉角角'弄的頭婚腦帳 10/11 22:16
CP64: 如果你不希望 shell 亂解特殊符號的話 記得用 '' 框起來 10/11 22:19
bibo9901: 都不是特例啊 你寫個程式自己處理argv就知道了 10/11 23:10
HamalAri: 哪有什麼特例? man find 看一下 -name 會花很多時間? 10/11 23:28
HamalAri: 不然就 'c\*' 做兩次不會喔 10/11 23:28
HamalAri: 覺得 bash 預設很難用也可以 GLOBIGNORE 幹掉 * 10/11 23:31
ckc1ark: 用set -x打開 就可以知道真正下到程式裡的argument們了 10/12 01:14
※ 編輯: zi98btcc (180.218.227.173), 10/30/2015 07:30:29