打印&符号

时间:2012-09-25 08:11:35

标签: bash

我有一个bash脚本,它使用带变量的url并将其写入文件,问题是&符号正在干扰并被解释为命令/控制字符。

在这种情况下,字符串在传递给脚本之前无法转义,我还没有找到任何方法来执行此操作。

if [ $1 ] ; then
    url=$1
    printf %q "$url" > "/somepath/somefile"
fi

以$ 1为例,例如localhost?x = 1& y = 2& z = 3

打印的内容只是第一个&符之前的部分:“localhost?x = 1”

我也尝试过echo而不是printf,但它完全一样吗?

3 个答案:

答案 0 :(得分:2)

您的脚本没问题,但您需要使用带引号的参数调用脚本:

./myscript.sh "localhost?x=1&y=2&z=3"

答案 1 :(得分:1)

回声和打印都没有问题。问题是,当您运行脚本时,它会在后台启动这2个作业。有关详细信息,请查看:http://hacktux.com/bash/ampersand。 您可以在撇号中使用'localhost?x = 1& y = 2& z = 3'来启动脚本,因此bash不会将&符号视为运算符,而是将其视为普通字符。

答案 2 :(得分:0)

引用一些东西。将所有$1替换为"$1" s。并在实际调用脚本时引用参数。