2013-04-26 30 views
1

我正在對導致單行輸出的文件執行grep。該輸出具有*作爲數據。在shell腳本中,我試圖將值賦給一個變量,但是*被當前文件夾中的文件列表替換。*正在被當前文件夾文件列表替換

例如: 我的腳本名稱是script1.sh,並且我在另一個文件script2.sh處於同一個目錄中。

腳本的內容是

VAR1=`grep pattern search_file` 
echo $VAR1 

預期的產出將是

模式是*

但我得到的輸出是

模式是s cript1.sh script2.sh

請讓我知道我做錯了什麼。

+0

我在提示中試過這個。 VAR ='echo「*」' echo $ VAR導致與上面相同的問題。 – vcosk 2013-04-26 15:28:33

回答

1

使用set -f外殼選項將禁用子殼和交互會話通配符。 使用set +f再次啓用globbing。

+0

它的工作原理:D謝謝 – vcosk 2013-04-26 15:37:18

+1

這就像關閉水龍頭,因爲你有一個漏水的水龍頭。有效,但過於寬泛。 – chepner 2013-04-26 16:29:44

1

您需要用\轉義*,否則將其視爲與當前目錄中的文件名相匹配的通配符。

\* 
+1

由於它是通過'grep'從文件中讀取的,''''''''''很少有機會轉義。 – chepner 2013-04-26 16:27:33

3

您只需引用變量:echo "$VAR1"

如果你看看bash shell expansions的順序,你會發現文件名擴展發生後參數擴張。 未加引號的變量隨後將進行單詞分割和文件名擴展。

相關問題