繁体   English   中英

在构造URL时使用bash函数的所有参数

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

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