1

我有一个 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 但它完全一样??

4

3 回答 3

2

您的脚本很好,但您需要使用带引号的参数调用脚本:

./myscript.sh "localhost?x=1&y=2&z=3"
于 2012-09-25T08:16:52.763 回答
1

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

于 2012-09-25T08:23:05.020 回答
0

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

于 2012-09-25T08:14:53.613 回答