繁体   English   中英

如何在bash脚本中编码url?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM