Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在bash脚本中编码url?_Linux_Bash_Url - Fatal编程技术网

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]}"