如何在bash中回显包含未转义美元符号的变量

时间:2010-10-13 12:32:38

标签: bash escaping dollar-sign

如果我有一个包含未转义美元符号的变量,有什么办法可以回显变量的全部内容吗?

例如某些东西调用脚本:

./script.sh "test1$test2"

然后,如果我想使用参数,它会被“截断”,如下所示:

echo ${1}
test1

当然,引用可变名称并没有帮助。我无法弄清楚如何引用它,这样一旦脚本收到参数,我至少可以自己逃避美元符号。

4 个答案:

答案 0 :(得分:30)

问题是脚本首先接收“test1”,并且它不可能知道存在对空(未声明)变量的引用。在将$传递给脚本之前,您必须先将其转义,如下所示:

./script.sh "test1\$test2"

或者像这样使用单引号'

./script.sh 'test1$test2'

在这种情况下,bash不会扩展该参数字符串中的变量。

答案 1 :(得分:7)

在运行脚本之前替换变量。

./script.sh 'test1$test2'

答案 2 :(得分:4)

通过使用单引号,$等元字符将保留其字面值。如果使用双引号,则会插入变量名称。

答案 3 :(得分:0)

正如Ignacio告诉你的那样,变量已被替换,因此你的脚本获得./script.sh test1$0的值{。}}。

但即使在你使用文字引号传递参数的情况下,你也应该在$1中引用"$1"。这是一个很好的做法。