[英]Use all arguments to a bash function in constructing a URL
说我有一个Bash的功能,所以像这样的
function so
{
open https://stackoverflow.com/search?q=$1
}
我从这样的shell调用
jessescott@Jesses-MacBook-Pro:~$ so foo
这给了我https://stackoverflow.com/search?q=foo
现在,如果我想搜索
jessescott@Jesses-MacBook-Pro:~$ so foo bar
这不会捕获'bar',因为参数是由空格分割的。
我当然可以$2
函数添加$2
,但我希望能够传递n
-args。
我也可以像这样逃避$1
function so
{
open https://stackoverflow.com/search?q="$1"
}
这需要我去
jessescott@Jesses-MacBook-Pro:~$ so 'foo bar'
......这是有效的,但不是最好的b / c必须记住逃避我的报价。
我在功能中错过了一个明显的其他解决方案吗?
由于您的目标是将所有参数连接成一个字符串以作为URL传递,因此"$*"
是作业的工具:
so() { open https://stackoverflow.com/search?q="$*"; }
这使用IFS
的第一个字母(默认情况下为空格)来分隔所有参数。
也就是说,当您的问题包含任意文本时,这通常不安全。 考虑接受stdin上的输入; 例如:
so() {
local title
IFS= read -r -p 'Question title: ' title
[[ $title ]] && open https://stackoverflow.com/search?q="$title"
}
...通过在上下文中读取输入,它不可能被解析为shell命令,即使对于诸如, How can I safely pass the value assigned with var=$'$(rm -rf ~)\\'$(rm -rf ~)\\'' on a SSH command line?
您可以使用$ @这是所有输入参数的数组。
在你的例子中,它将是这样的:
open https://stackoverflow.com/search?q="$@"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.