如何在 sh 命令替换中包含变量?
How do I include a variable in a ksh command subtitution?
我试图在作为变量接收的 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
NB2=$(grep -v -c -E -e '^\".*\"$' abc.txt)
如果可行,则将该正则表达式分配给 $pattern
。不要添加更多的反斜杠和引号。
pattern='^\".*\"$'
引用变量扩展总是一个好主意,以防止不需要的通配符扩展和单词拆分。
NB=$(grep -c -E -v -e "${pattern}" abc.txt)
# ^ ^
我试图在作为变量接收的 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
NB2=$(grep -v -c -E -e '^\".*\"$' abc.txt)
如果可行,则将该正则表达式分配给 $pattern
。不要添加更多的反斜杠和引号。
pattern='^\".*\"$'
引用变量扩展总是一个好主意,以防止不需要的通配符扩展和单词拆分。
NB=$(grep -c -E -v -e "${pattern}" abc.txt)
# ^ ^