Bash

殼吃?字元

  • April 15, 2016

這是一個如此簡單的問題,我敢肯定有人問過這個問題,但我找不到。我沒有故意設置的 shell 似乎會吃掉任何涉及問號的單詞:

$ bash --version
GNU bash, version 4.3.42(1)-release (x86_64-apple-darwin13.4.0)
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

$ echo a ? = =?
a =

$ not-a-command? echo a
a

$ (?) echo a
a

萬一這很重要,請注意任何包含問號的單詞似乎完全無聲無息地消失了——以至於她的 shell 甚至從未註意到呼叫以沒有指定有效執行檔的單詞開頭——即使問號是不是一開始。

您可能nullglob啟用了 shell 選項;如果 glob 不匹配任何內容,這將導致刪除任何包含萬用字元 (*或)的單詞。?因此,如果您所在的文件夾不包含任何文件、文件夾等具有單字元名稱的文件夾,?則不會擴展為任何內容,而是會被刪除;同樣,not-a-command?不太可能匹配任何內容,而是將被刪除。

要檢查是否是這種情況,請執行

shopt nullglob

要停用該選項,請執行

shopt -u nullglob

引用自:https://unix.stackexchange.com/questions/276731