我已经搜索了所有答案(有很多),但没有一个解决方案适用于我想要实现的代码。我遇到以下代码的麻烦:
win_string="\\\[something]\\\[somethingelse] somethingelseelse:"
# if a valid pair has been found, stop the loop
if [ $(cat somefile.txt | grep "$win_string") != "" ];then
echo
echo "**********WIN!**********"
cat somefile.txt | grep "$win_string"
echo "**********WIN!**********"
echo
exit 0
fi
让我们说somefile.txt在每一行都包含一堆垃圾,我们正在搜索该行:
[something][somethingelse] somethingelseelse:
当我剪切并粘贴到终端时,它工作正常,但是当我把它放在一个shellcript中时,我得到以下错误:
helloworld.sh: 146: [: !=: unexpected operator
我知道它必须与我的搜索查询中的[和]有关,并且最初没有$ win_string变量,我只是添加它以尝试解决问题...
答案 0 :(得分:0)
尝试存储grep的结果,然后进行if比较。
#!/bin/bash
win_string="\[something]\[somethingelse] somethingelseelse:"
# if a valid pair has been found, stop the loop
result=$(cat somefile.txt | grep "$win_string")
if [ "$result" != "" ];then
echo "**********WIN!**********"
cat somefile.txt | grep "$win_string"
echo "**********WIN!**********"
exit 0
fi
在短暂的测试中,这对我有用。
答案 1 :(得分:0)
除了@ cb0的答案外,因为我确实花了一段时间寻找解决方案,所以如果您需要将字符串从传递的参数中转义到脚本,则可以使用变量替换bashism:>
script.sh :
#!/bin/bash
result=$(cat somefile.txt | grep "${1//\[/\\[}")
if [ "${result}" != "" ];then
echo "**********WIN!**********"
echo "${result}"
echo "**********WIN!**********"
exit 0
fi
script.sh '[hello]world'