下面的腳本輸出爲空。它缺少什麼?我想用grep一個字符串shell腳本grep grep一個字符串
#!/bin/ksh
file=$abc_def_APP_13.4.5.2
if grep -q abc_def_APP $file; then
echo "File Found"
else
echo "File not Found"
fi
下面的腳本輸出爲空。它缺少什麼?我想用grep一個字符串shell腳本grep grep一個字符串
#!/bin/ksh
file=$abc_def_APP_13.4.5.2
if grep -q abc_def_APP $file; then
echo "File Found"
else
echo "File not Found"
fi
在bash
,使用<<<
重定向從一個字符串('Here string'):
if grep -q abc_def_APP <<< $file
在其他炮彈,你可能需要使用:
if echo $file | grep -q abc_def_APP
我把我的then
放在下一行;如果你想讓你的then
在同一行上,然後在我寫的東西之後加上; then
。
需要注意的是這個任務:
file=$abc_def_APP_13.4.5.2
是非常奇怪的;它採用環境變量${abc_def_APP_13}
的值並在末尾添加.4.5.2
(由於我們可以看到腳本的開始,它必須是env var)。你可能打算寫:
file=abc_def_APP_13.4.5.2
在一般情況下,你應該附上持有的文件名用雙引號變量的引用,以避免在文件名中的空格等問題。這裏並不重要,但最佳做法是良好做法:
if grep -q abc_def_APP <<< "$file"
if echo "$file" | grep -q abc_def_APP
如果我使用'if echo $ file | grep -q abc_def_APP這是打印$文件的內容,我不想 – Jill448 2013-05-09 18:12:15
您選擇了'-q'選項使'grep'以'quiet'模式運行(每個[POSIX](http:// pubs .opengroup.org/onlinepubs/9699919799 /公用事業/ grep.html));它不應該輸出任何東西。如果你的'grep'版本對'-q'有不同的理解,你必須看看你的man'grep'的手冊頁,或者重定向到'/ dev/null'。 – 2013-05-09 18:16:13
第一個人工作。 '如果grep -q abc_def_APP <<< $文件' – Jill448 2013-05-09 18:17:06
Yu!使用外殼的字符串匹配
if [[ "$file" == *abc_def_APP* ]]; then ...
你不用冒着與'* abc_def_APP *'匹配多個文件的風險並且破壞了這個過程中的條件嗎?如果'$ file'爲'abc_def_APP1'且'* abc_def_APP *'擴展爲'abc_def_APP1 abc_def_APP2',那麼該條件將被評估爲false。 – Anthony 2014-11-01 13:08:22
和關於「Yuck!」部分我完全同意你的看法!整個unix(unix-like)命令外殼令人噁心......但你不能沒有它,你能嗎? – Anthony 2014-11-01 13:14:02
在雙括號內,我們模式匹配左側字符串,不匹配文件名。 – 2014-11-02 02:32:30
爲什麼#!行說ksh? – jman 2013-05-09 18:09:16
'file'應該是什麼值?我懷疑你可能在該作業的RHS上存在問題。 – chepner 2013-05-09 18:14:07