如果没有传递参数,Bash提供默认参数

asi*_*niy 1 bash

我安装了一个名为的程序zeus。它允许我运行以下命令:

zeus parallel_rspec spec/
Run Code Online (Sandbox Code Playgroud)

哪里parallel_rspec是由zeus运行的命令,是命令spec/所必需的目录parallel_rspec

我在自己的别名.profile

alias rsp='zeus parallel_rspec'
Run Code Online (Sandbox Code Playgroud)

因此,我可以运行以下命令:

rsp spec/ # => equal to `zeus parallel_rspec spec/`
Run Code Online (Sandbox Code Playgroud)

但是spec/目录是常见的(95%的情况)。默认情况下,如何使我的rsp别名通过spec/文件夹参数(如果未传递其他名称,如spec/blablabla)?

Hau*_*eth 7

Bash具有变量默认值的语法:

${VARNAME:-default}
Run Code Online (Sandbox Code Playgroud)

因此,在您的情况下,您需要使用如下所示的函数:

rsp() { zeus parallel_rspec "${1:-spec/}" }
Run Code Online (Sandbox Code Playgroud)

或者,如果您想传递更多选择,以防万一:

rsp() {
  folder="${1:-spec/}"
  shift 1
  zeus parallel_rspec "$folder" "$@"
}
Run Code Online (Sandbox Code Playgroud)


arc*_*444 5

您应该改用函数:

function rsp {
  [ -z "$1" ] && zeus parallel_rspec spec/ || zeus parallel_rspec "$1"
}
Run Code Online (Sandbox Code Playgroud)

您可以将其添加到您的个人资料或 bashrc。如果您不向函数提供参数,则该函数$1将为空,因此它将/spec用作路径,否则它将使用该参数

  • 它可能只是 `rsp() { zeus parallel_rspec "${1:-spec/}" }`。 (4认同)