19

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

例如调用脚本:

./script.sh "test1$test2"

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

echo ${1}
test1

当然,单引号变量名称没有帮助。我不知道如何引用它,以便在脚本收到参数后我至少可以自己转义美元符号。

4

4 回答 4

31

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

./script.sh "test1\$test2"

或者像这样使用单引号'

./script.sh 'test1$test2'

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

于 2010-10-13T12:36:29.183 回答
7

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

./script.sh 'test1$test2'
于 2010-10-13T12:33:54.773 回答
4

通过使用单引号,元字符 like$将保留其文字值。如果使用双引号,变量名将被插值。

于 2010-10-13T12:38:43.080 回答
0

正如 Ignacio 告诉您的那样,该变量已被替换,因此您的脚本将./script.sh test1作为$0and的值$1

但即使在您使用文字引号传递参数的情况下,您也应该始终"$1"echo "${1}". 这是一个很好的做法。

于 2010-10-13T12:37:20.757 回答