2013-07-02 143 views
3

如果我想尋找一個字符串是否是字母數字,超過一定值短,說10,我會做這樣的(在BASH + GREP):GREP:在正則表達式變量

if grep '^[0-9a-zA-Z]\{1,10\}$' <<<$1 ; then ...

(順便說一句:我正在檢查$ 1,即第一個參數)

如果我想要將值10寫入變量,例如

UUID_LEN=10 
if grep '^[0-9a-zA-Z]\{1,$UUID_LEN\}$' <<<$1 ; then ... 

我嘗試過各種逃逸,牙套等,但不能避免該錯誤消息

grep: Invalid content of \{\} 

我敢確信它不能google搜索和閱讀的bash和grep教程後做完了。我錯了嗎?任何方式來解決這個問題?

+0

的可能重複的[添加grep命令bash腳本](http://stackoverflow.com/questions/5142729/add-grep-command-to-bash-script) – tripleee

回答

3

你需要使外殼產生的參數傳遞到grep之前擴展參數用雙引號:

if grep "^[0-9a-zA-Z]\{1,$UUID_LEN\}$" <<<$1 ; then ... 

bash可以執行正則表達式匹配本身,而無需啓動另一個進程來運行grep

if [[ $1 =~ ^[0-9a-zA-Z]{1,$UUID_LEN}$ ]]; then 
+0

當然!答案非常簡單!引號「」會和「'擴大內部......的答案」不同。謝謝 –