0
我demo.csv文件grep的內部沒有腳本的工作
data1,text1,text01
data2,text2,text02
data3,text3,text03
data4,text4,text04
data5,text5,text05
data6,text6,text06
data7,text7,text07
data8,text8,text08
data9,text9,text09
我寫過濾掉數據的腳本demo.ksh作爲
#!/bin/ksh
while [[ $1 = -* ]]
do
case $1 in
--data)
shift
ARGS="$ARGS -e \"$1\""
;;
--excl)
ARGS="-v $ARGS"
;;
esac
shift
done
echo "grep $ARGS data.csv > test.txt"
grep $ARGS data.csv > test.txt
demo.ksh和數據的.csv是在相同dir.demo.ksh具有+ X permission.when我運行demo.ksh作爲
demo.ksh --data data3
輸出: demo.ksh --data data3
< - 由於腳本中的回顯
test.txt是空白文件(?不知道爲什麼) 如果我複製了由於demo.ksh中的回顯而在控制檯上打印的命令,並直接粘貼到控制檯上並按回車鍵。它運行良好並生成test.txt爲
data3,text3,test03
爲什麼它不起作用。我錯過了什麼或在shellcript內部以錯誤的方式執行grep
如果您在shell腳本中的'--data'附加了引號,該怎麼辦?你也使用$ 1作爲arg,你應該使用$ 2作爲arg。 – SMA
我覺得很好。當我從腳本運行echo「grep $ ARGS data.csv> test.txt」的輸出時,直接到cmd,它的工作正常。 – Jai
你不能這樣做。您將文字參數'「data3」'傳遞給'grep'而不是參數'data3',並且grep正在嘗試匹配數據中的雙引號。這裏的引用對你來說什麼都不做,事實上,如果你把你的腳本叫做'demo.ksh --data'foo bar'',那麼grep最終會在一個名爲'bar'的文件中尋找字符串'「foo'' !它相當於調用'grep -e'「foo''bar''data.csv'。 –