簡體   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