我有一个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,但它完全一样吗?
答案 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。并在实际调用脚本时引用参数。