编辑(旁边问题)
有人可以解释一下这行吗?
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被删除
答案 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]}"