我有 SED 模式:
[^a-zA-Z0-9]
/b\./s/.*c\.. \([^ ]*\) .*/\1/p
等等。
我需要将它们作为变量传递给 echo 命令。
目前,我定义 $pattern 变量如下:
$pattern="[^a-zA-Z0-9]"
然后通过管道将其传递给 echo,如下所示:
echo "$OUTPUT" | sed "s/$pattern/g"
但代码不是传递模式,而是传递命令并返回错误
=[^a-zA-Z0-9]: command not found
出了什么问题?
答案1
$ pattern='[^a-zA-Z0-9]'
$ echo "123 ABC" | sed "s/$pattern/g"
sed: -e expression #1, char 16: unterminated `s' command
$ echo "123 ABC" | sed "s/$pattern//g"
123ABC
$ echo "123 ABC" | sed "s/$pattern/XYZ/g"
123XYZABC
和...
Shell 变量的分配没有前导
$
.
答案2
代替
$pattern="[^a-zA-Z0-9]"
经过
pattern="[^a-zA-Z0-9]"
Shell 变量的赋值不带前导 $。