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