我正在努力傳遞包含在變量中的幾個grep模式。這是我的代碼:使用變量在bash中傳遞grep模式
#!/bin/bash
GREP="$(which grep)"
GREP_MY_OPTIONS="-c"
for i in {-2..2}
do
GREP_MY_OPTIONS+=" -e "$(date --date="$i day" +'%Y-%m-%d')
done
echo $GREP_MY_OPTIONS
IFS=$'\n'
MYARRAY=($(${GREP} ${GREP_MY_OPTIONS} "/home/user/this path has spaces in it/"*"/abc.xyz" | ${GREP} -v :0$))
這就是我想要它做的事:
- 確定/界定其中的grep是
- 分配控股參數,我將傳遞給一個變量(GREP_MY_OPTIONS) grep的
- 分配多個圖案GREP_MY_OPTIONS
- 使用grep和我都存儲在$ GREP_MY_OPTIONS模式搜索包含空格的路徑中的幾個文件,並把它們在ARR唉
當我使用「回聲$ GREP_MY_OPTIONS」這也帶來我所期待的,但是當我運行該腳本,它失敗的錯誤:
/斌/ grep的:無效選項 - 「」
我在做什麼錯?如果路徑中沒有空格,那麼一切似乎都可以正常工作,所以我認爲這與IFS有關,但我不確定。
你會介意做:'echo「$ {GREP} $ {GREP_MY_OPTIONS} \」/ home/user /此路徑中有空格/ \「* \」/ abc.xyz \「| $ {GREP} -v:0 $「',看看將要執行的實際命令是什麼? – Rubens
This produced: /bin/grep -c -e 2013-01-17 -e 2013-01-18 -e 2013-01-19 -e 2013-01-20 -e 2013-01-21 -e 2013 -01-22 -e 2013-01-23 -e 2013-01-24 -e 2013-01-25「/ home/user /此路徑中有空格/」*「/ abc.xyz」|/bin/grep -v:0 $ – user1464409
從文體上講,最好對環境變量使用大寫變量名稱,並使用小寫變量名稱作爲通用名稱。腳本中的SHOUTING較少。就個人而言,我可能會使用'$ opts'來代替'$ GREP_MY_OPTIONS';我儘可能避免使用代碼中的「我的」一詞(實際上大部分時間),但這是我的問題。最後(現在),如果我可能需要使用不同的'grep'程序,我通常使用:'grep =「$ {GREP:-grep}」'這允許環境變量GREP覆蓋缺省值。測試時我用'date'做了。 –