[英]How to encode url in bash script?
编辑(旁题)
有人可以解释一下这行吗?
eval website=\${$#}
该脚本读取了很多paremeters的,这有点像这样调用
./script.sh -t 30 -n 100 -a测试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
$符号被删除
最简单的方法可能是转义导致某些问题的字符。
除非您的网址包含一些特殊字符为'
或\\
,你应该罚款只是通过把拖车之间您的网址'
:
$ firefox 'YOUR_URL'
这将阻止对YOUR_URL
内容进行评估。
编辑 ,以反映更新的答案:
您可以使用echo
命令看到bash如何扩展参数。
在您的示例中,bash认为$
用于标识变量(名为4
的变量),因此它将$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
永远不要使用eval
,并且总是引用变量。 存储在参数1
的第一个参数ist:
firefox "$1" &
这行:
eval website=\${$#}
将变量设置为最后一个位置参数,无论有多少个参数。
更改为:
website=${@: -1}
顺便说一句,这是一个Bashism。
以下是完成相同任务的其他一些Bashism:
echo "${!#}"
echo "${@:$#}"
echo "${BASH_ARGV[0]}"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.