加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

数组 – 使用变量在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的位置
>分配一个变量(GREP_MY_OPTIONS),保存参数,我将传递给grep
>为GREP_MY_OPTIONS分配几个模式
>使用grep和我在$GREP_MY_OPTIONS中存储的模式搜索包含空格的路径中的几个文件并将它们保存在一个数组中

当我使用“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).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读