2014-03-02 22 views
1

我正在從命令行讀取一個字符串,並將其存儲到一個變量中。我遇到的問題是,當我試圖存儲一個模式(例如* .cpp)時,如果當前目錄中存在匹配項,該變量將最終保持與該模式的第一個匹配,並且該模式if沒有比賽。爲了將模式存儲到字符串中,我需要做些什麼?bash:將模式存儲在一個變量中,而不需要評估模式

問題的代碼:

pattern=$1 
#say $1 is *.cpp 
#what do I need to do to $1 for pattern to hold *.cpp rather than the 1st match to *.cpp 

編輯:我沒有用引號括$ 1,但我的結果是一樣的使用沒有引號的。

問題作爲reproductable情況:

#$1 is *.cpp 
#!/bin/bash 
pattern = "$1" 
echo $pattern 

格局不會回*的.cpp,但第一個文件中找到匹配模式。

+0

我忘了提,我確實使用了引號,並且它具有相同的效果確切因爲根本不使用引號(都返回第一場比賽)。 –

+0

你怎麼使用'pattern'然後...?您尚未提供足夠的信息來正確評估問題。嘗試提供可再現的案例。 – isedev

+0

帖子已被編輯。 –

回答

2

做了一些測試。看來你需要在腳本中使用中引用。即在腳本:

pattern=$1 
echo "$pattern" 

,然後調用腳本的時候:

./test.sh "*.cpp" 

結果:

*.cpp 
+0

這對我來說非常合適。 –

+1

這就是外殼的工作原理。如果你執行'ls * .cpp','ls'的第一個參數不會是'* .cpp'。它會擴展到潛在的許多論點。 –

0

傳遞參數時可以使用單引號,所以確切的字符串會被保留。

myscript.sh:

#!/bin/bash 

echo $1 

從CMDLINE呼喚:

# ./myscript.sh '*.cpp' 
*cpp 

而且相同的結果用反斜槓:

# ./myscript.sh \*.cpp 
*cpp 
相關問題