1

我有一个 shell 函数,我想检查用户是否传入了第二个变量。我已经尝试过了,但它似乎不起作用

function dash() {
    if [ -z "$2" ]; then
        open dash://$1:$2;
    else
        open dash://$1;
    fi
}

基本上,我想说如果第二个参数$2传入 do 'X' else do 'Y'

4

4 回答 4

2

$#给出传递的参数数量

if [ $# -eq 2 ]
then
  echo "2 arguments passed"
fi
于 2013-09-24T18:40:14.267 回答
1

你只是把它倒过来——“-z”测试一个空字符串。因此,只需交换它或使用“-n”(非空):

function dash() {
    if [ -n "$2" ]; then
        open dash://$1:$2;
    else
        open dash://$1;
    fi
}

这个网站是一个很好的了解更多信息的网站:

http://tldp.org/LDP/abs/html/comparison-ops.html

于 2013-09-24T18:46:56.910 回答
0

该功能可以通过此修复

function dash() {
    if [ "$#" -gt 1 ]; then
        open "dash://$1:$2"
    else
        open "dash://$1"
    fi
}
  • 您可以使用$#来检查参数的数量。
  • 引用您的论点以保留可能的空格。

在调用你的函数时,也要引用它:

dash "first argument" "second argument"

或者

dash "first argument"

如果你这样做:

first='first argument'
dash $first

将有两个参数(第一个参数和参数),而不仅仅是一个。

于 2013-09-24T18:45:30.473 回答
0

做就是了:

function dash() {
  open dash://$1${2+:}$2
}

${2+:}扩展为:if$2设置,否则为空字符串。

于 2013-09-24T19:13:00.833 回答