2012-09-25 115 views
0

我有一个bash脚本,需要一个带变量的URL并将其写入文件,问题是&符号干扰并被解释为命令/控制字符。打印符号

在这种情况下,字符串不能在转到脚本之前被转义,我还没有找到任何方法来做到这一点。 ?

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

以$ 1是例如本地主机X = 1个& Y = 2 & Z = 3

印刷得到什么的只是第一个符号之前的部分: “本地主机X = 1?”

我也试过回声而不是printf,但它是完全一样的?

回答

2

你的剧本是好的,但你需要一个报价参数来调用脚本:

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

谢谢,所有的建议都解决了这个问题,需要引用参数,然后按预期工作。 – crankshaft

0

引用的东西。将所有$1 s替换为"$1" s。当你实际调用你的脚本时引用参数。

1

有回音,也没有打印没有问题。问题是,当你运行这个脚本时,它会在后台启动这两个作业。欲了解更多信息,你可以检查:http://hacktux.com/bash/ampersand。 你可以简单地用'localhost?x = 1 & y = 2 & z = 3'在撇号中启动脚本,所以bash不会将&符号视为运算符,而只是与正常字符一样。