Bash

如何將函式的所有參數傳遞給另一個命令?

  • November 24, 2020

你好,我有這個~/.bash_profile

export GOPATH="$HOME/go_projects"
export GOBIN="$GOPATH/bin"

program(){
       $GOBIN/program $1
}

所以我能夠做到program "-p hello_world -tSu"。有什麼方法可以在不使用引號的情況下執行程序和自定義標誌?如果我這樣做,program -p hello_world -tSu它只會使用-p標誌,空格之後的所有內容都將被忽略。

在您的programshell 函式中,使用"$@"指代給函式的所有命令行參數的列表。使用引號,給定的每個命令行參數program將另外單獨引用(您通常需要這個)。

program () {
   "$GOBIN"/program "$@"
}

然後你會這樣打電話program

program -p hello_world -tSu

或者,如果您想通過hello world而不是hello_world

program -p 'hello world' -tSu

正如您所注意到的, Using$1僅指第一個命令行參數(並且$2將引用第二個等)。的值$1將另外在空格上拆分,並且每個生成的字元串都將進行文件名通配,因為擴展是未引用的。這將導致無法正確地將包含空格或文件名通配模式的參數傳遞給函式。

引用自:https://unix.stackexchange.com/questions/621124