Linux 如何在bash脚本中编码url?
编辑(附带问题) 有人能解释一下这条线是干什么的吗Linux 如何在bash脚本中编码url?,linux,bash,url,Linux,Bash,Url,编辑(附带问题) 有人能解释一下这条线是干什么的吗 eval website=\${$#} 这个脚本读了很多参数,它的名字有点像这样 ./script.sh-t30-n100-a测试 我无法读取url() 我使用传递给bash脚本的URL打开firefox。如何对它们进行编码?其中一些URL导致了问题 一些代码 eval website=\${$#} // takes as argument firefox -width 1280 -height 8000 ${website} &
eval website=\${$#}
这个脚本读了很多参数,它的名字有点像这样
./script.sh-t30-n100-a测试
我无法读取url()
我使用传递给bash脚本的URL打开firefox。如何对它们进行编码?其中一些URL导致了问题 一些代码
eval website=\${$#} // takes as argument
firefox -width 1280 -height 8000 ${website} &
有问题的URL
41912美元
在firefox中,它打开为
$sign被删除最简单的方法可能是转义导致某些问题的字符 除非您的url包含一些不寻常的字符,如
”
,或\
,否则只需将url放在两个”
之间即可:
$ firefox 'YOUR_URL'
这将阻止对您的\u URL
内容进行评估
编辑,以反映更新的答案: 您可以使用
echo
命令查看bash如何扩展参数
在您的示例中,bash认为$
用于标识变量(名为4
的变量),因此它用变量4
的值替换$4
,该值未定义(因此仅删除$4
):
切勿使用
eval
,始终引用变量。第一个参数存储在参数1
中:
firefox "$1" &
这一行:
eval website=\${$#}
将变量设置为最后一个位置参数,而不管有多少个位置参数
将其更改为:
website=${@: -1}
顺便说一句,这是一种巴什主义
以下是其他几个巴沙尔主义,它们实现了同样的目标:
echo "${!#}"
echo "${@:$#}"
echo "${BASH_ARGV[0]}"
请包括有问题的url,以使演示/测试更容易-1:这个问题与url编码关系不大,与bash引用关系很大。
echo "${!#}"
echo "${@:$#}"
echo "${BASH_ARGV[0]}"