【发布时间】:2019-04-04 03:59:57
【问题描述】:
我正在尝试在作为变量接收的 grep 中查找与正则表达式模式匹配的行数。当我直接在命令替换中使用模式执行 grep 时,它可以工作。当我为模式使用变量时,它不会。
#!/bin/bash
pattern="'^\\\".*\\\"$'"
echo "pattern : $(echo $pattern)"
NB=$(grep -c -E -v -e ${pattern} abc.txt)
NB2=$(grep -v -c -E -e '^\".*\"$' abc.txt)
echo " -> $NB , $NB2"
除了代码中的内容,我已经尝试过:
NB=$(grep -c -E -v -e $(echo $pattern) abc.txt)
没有成功。
cmd="grep -c -E -v -e ${pattern} abc.txt"
NB="$($cmd)"
没有成功。
在示例中,abc.txt 文件包含 3 行:
"abc"
"abc
abc"
变量中的模式似乎没问题:
pattern : '^\".*\"$'
我希望 NB 和 NB2 中的 2 个数字相同。如果查看代码,实际结果是:
pattern : '^\".*\"$'
-> 3 , 2
我希望:
pattern : '^\".*\"$'
-> 2 , 2
【问题讨论】:
-
是 ksh 还是 bash?你的文章说 ksh,你的 shebang 行说
#!/bin/bash。
标签: shell ksh command-substitution