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

Posted

技术标签:

【中文标题】如何在bash中回显包含未转义的美元符号的变量【英文标题】:How to echo a variable containing an unescaped dollar sign in bash 【发布时间】:2011-04-24 19:54:45 【问题描述】:

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

例如调用脚本:

./script.sh "test1$test2"

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

echo $1 test1

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

【问题讨论】:

【参考方案1】:

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

./script.sh "test1\$test2"

或者像这样使用单引号'

./script.sh 'test1$test2'

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

【讨论】:

【参考方案2】:

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

./script.sh 'test1$test2'

【讨论】:

是的,好像是这样:) 在其他情况下,我实际上有带有未转义美元符号的变量,例如当我从文件中读取数据时。然后我想用这些数据调用我的脚本,那么在读取整个文件之前,我唯一的选择是 sed 吗? 从文件中读取数据不会做变量替换。【参考方案3】:

通过使用单引号,像$ 这样的元字符将保留其字面值。如果使用双引号,变量名将被插值。

【讨论】:

【参考方案4】:

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

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

【讨论】:

并且大括号不需要,因为这是一个简单的替换。

以上是关于如何在bash中回显包含未转义的美元符号的变量的主要内容,如果未能解决你的问题,请参考以下文章

如何从数据库中回显具有特定变量的行

如何使用 sleep() 在 while 循环中回显某些内容?

无法在终端“bash:/etc/odbcinst.ini:权限被拒绝”中回显[重复]

如何在禁用布局时在引导程序中设置的 Zend 控制器中回显头部链接

™ 来自数据库未显示符号

在 bash 脚本中回显将“--md5”更改为“?-md5”