我需要双引号变量吗?

我需要双引号变量吗?

当我们双引号 shell 变量时,我感到很困惑。
具体来说,我使用以下 sed 替换命令:

sed -i.tmp "/$MY_VAR/d" /foo/bar/file.txt  

但我不是在引用$MY_VAR。它是否正确?如果没有的话怎么引用呢?
下面的显然不行

sed -i.tmp '/"$MY_VAR"/d' /foo/bar/file.txt  

答案1

在你的第一个命令中,你引用变量。

作为第二个命令行参数传递的字符串sed带有双引号,变量位于这些引号内并将由 shell 扩展。

正如您所指出的,第二个命令将不起作用(如预期),因为 shell 不会扩展变量的值,因为它是使用单引号引起来的。

$MY_VAR第一个命令是正确的,但如果包含斜杠,则会出现问题。如果是,请为sed中未出现的模式选择一个分隔符$MY_VAR

sed "\@$MY_VAR@d"

一个变量是当它出现在引号中时。该变量不需要“严格引用”即可。也就是说,在字符串 中"hello $world!",即使变量$world不显示为 ,它也会被引用"$world"

重要的是整个字符串被引用。如果使用双引号,那么 shell 将扩展其中的所有变量。

在上面的示例中,字符串"\@$MY_VAR@d"被引用,并且变量$MY_VAR位于其中,因此它也被引用(因为它位于被引用的字符串内)。

相关内容