数组 – 使用变量在bash中传递grep模式
发布时间:2020-12-15 21:06:09 所属栏目:安全 来源:网络整理
导读:我正在努力传递变量中包含的几个grep模式.这是我的代码: #!/bin/bashGREP="$(which grep)"GREP_MY_OPTIONS="-c"for i in {-2..2}do GREP_MY_OPTIONS+=" -e "$(date --date="$i day" +'%Y-%m-%d')doneecho $GREP_MY_OPTIONSIFS=$'n'MYARRAY=( $(${GREP} ${G
我正在努力传递变量中包含的几个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的位置 当我使用“echo $GREP_MY_OPTIONS”时,它正在生成我所期望的但是当我运行脚本时它失败并出现以下错误: / bin / grep:无效选项 – ” 我究竟做错了什么?如果路径中没有空格,一切似乎都能正常工作,所以我认为这与IFS有关,但我不确定. 解决方法
如果将GREP_MY_OPTIONS构建为数组而不是简单字符串,则可以使原始大纲脚本合理地工作:
#!/bin/bash path="/home/user/this path has spaces in it" GREP="$(which grep)" GREP_MY_OPTIONS=("-c") j=1 for i in {-2..2} do GREP_MY_OPTIONS[$((j++))]="-e" GREP_MY_OPTIONS[$((j++))]=$(date --date="$i day" +'%Y-%m-%d') done IFS=$'n' MYARRAY=( $(${GREP} "${GREP_MY_OPTIONS[@]}" "$path/"*"/abc.xyz" | ${GREP} -v :0$) ) 我不清楚为什么你使用GREP =“$(哪个grep)”,因为你将执行相同的grep,就像你直接写grep一样 – 除非,我想,你有一些grep的别名(这就是问题;不要别名grep). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |