我正在努力传递包含在变量中的几个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'做了。 –