如何在bash脚本中编码url?

时间:2011-01-17 12:01:59

标签: linux bash url

编辑(旁边问题)

有人可以解释一下这行吗?

eval website=\${$#}

该脚本读取了许多参数,它有点像这样称为

./ script.sh -t 30 -n 100 -a test http://www.google.com

我无法阅读网址(http://www.google.com


我正在使用传递给bash脚本的url打开firefox。我该如何编码呢?其中一些网址引起了问题。

一些代码

eval website=\${$#} // takes as argument

firefox -width 1280 -height 8000 ${website} &

有问题的网址

http://www.airportbusiness.com//print/Airport-Business-Magazine/Expo-Returns-to-Vegas/1 $四万一千九百十二

在Firefox中,它以

打开

http://www.airportbusiness.com//print/Airport-Business-Magazine/Expo-Returns-to-Vegas/141912

$ sign被删除

3 个答案:

答案 0 :(得分:2)

最简单的方法可能是逃避导致某些问题的角色。

除非您的网址包含'\之类的不常用字符,否则只需将您的网址放在'之间即可:

$ firefox 'YOUR_URL'

这将阻止评估YOUR_URL个内容。


修改,以反映更新后的答案:

您可以使用echo命令查看bash如何扩展您的参数。

在您的示例中,bash认为$用于标识变量(名为4的变量),因此它将$4替换为变量4的值,未定义的(因此只删除$4):

$ echo http://www.airportbusiness.com//print/Airport-Business-Magazine/Expo-Returns-to-Vegas/1$41912
http://www.airportbusiness.com//print/Airport-Business-Magazine/Expo-Returns-to-Vegas/11912
$ echo 'http://www.airportbusiness.com//print/Airport-Business-Magazine/Expo-Returns-to-Vegas/1$41912'
http://www.airportbusiness.com//print/Airport-Business-Magazine/Expo-Returns-to-Vegas/1$41912

答案 1 :(得分:2)

永远不要使用eval,并始终引用您的变量。第一个参数存储在参数1

firefox "$1" &

答案 2 :(得分:1)

这一行:

eval website=\${$#}

将变量设置为最后一个位置参数,无论有多少。

将其更改为:

website=${@: -1}
顺便说一下,这是一种Bashism。

以下是其他几个完成同样事情的Bashisms:

echo "${!#}"
echo "${@:$#}"
echo "${BASH_ARGV[0]}"