所以,假设我有以下模式:
Thisisatest="1"
在一个名为 的文件中file
。
我想匹配精确的上面的字符串但无论出于何种原因,我选择循环列表中的一些数字,将它们用作变量并尝试执行以下操作:
Thisisatest="$varhere"
其中,上面的数$varhere
等于上面的数,即1
。 (虽然我提到了循环数字,这只是未来可能的用例,并且仍然是一个示例)
现在为了让事情变得更容易,假设我想匹配上面的内容精确的图案尽管使用上面的变量及其内容:
grep 'Thisisatest="$varhere"' file
其中文件包含字符串Thisisatest="1"
并$varhere
包含数字1
。
问题是,这行不通因为当单引号之间时不会发生变量扩展(如上所示)。
这是反驳这一失败的尝试:
- 变量替换的内容替换
echo "${varhere/[0-9]*/Thisisatest=\"$varhere\"}"
这里我使用echo
来看是否输出正确的字符串,因此它可以用作 grep 的输入...它输出以下内容:
'Thisisatest="'1'"
- 添加更多报价
echo "'Thisisatest="${varhere}"'"
输出:
'Thisisatest='1''
echo ''''Thisisatest=\"${varhere}\"''''
输出:
Thisisatest="'1'"
其余的很明显......现在上面的最后一次尝试似乎接近我想要的,但仍然不是。
有什么方法可以做到上述吗?
答案1
grep "Thisisatest=\"${varhere}\""
对我有用。“ \
”通过一个 shell 解释翻转以下字符的“我是特殊字符”标志。