我試圖做一個小腳本圍繞這個命令的封裝:爲什麼bash腳本將單引號添加到帶有星號的字符串?
$ egrep target /usr/lusers/me/test/*test.txt
/usr/lusers/me/test/1test.txt:target
那個目錄下有文件名爲1test.txt
和2test.txt
,其中一個包含一些文字,我想找到。
這裏是我的整個腳本,叫mygrep.sh
:
set -v
set -x
egrep "$1" '/usr/lusers/me/test/*test.txt'
下面是輸出:
$ ./mygrep.sh target
set -x
egrep "$1" '/usr/lusers/me/test/*test.txt'
++ egrep targ '/usr/lusers/me/test/*test.txt'
egrep: /usr/lusers/me/test/*test.txt: No such file or directory
注意'
S周圍的set -x
輸出的文件路徑,該命令將失敗。
現在比較腳本的這種變化:
set -v
set -x
egrep "$1" '/usr/lusers/me/test/1test.txt'
注意,唯一的區別是星號VS文本文件名稱。
輸出:
$ ./mygrep.sh target
set -x
egrep "$1" '/usr/lusers/me/test/1test.txt'
++ egrep target /usr/lusers/me/test/1test.txt
target
沒有單引號擴張後,和該命令的作品。
那麼爲什麼這些單引號添加了星號,以及爲什麼命令在這種情況下失敗?
我想通過一個把它們擴大到egrep並讓它在那裏擴大。我想這沒有關係,但那有可能嗎? – P1h3r1e3d13
@ P1h3r1e3d13 Globbing(即根據表達式生成匹配的文件名)是shell的一個特性,而不是'egrep'。如果星號將其設置爲「egrep」,則它是該實用程序的文字星號。 – Fred
哎呀,謝謝。 – P1h3r1e3d13