For 循环 for shell 变量

For loop for shell Variables

概览:

我正在尝试为需要多个参数的函数编写错误代码。

如果这些参数中的任何一个为空,我想告诉用户一个语法错误。

尝试次数:

我试过没有写出单独的参数:

# Error Checking
for i in "{1.4}"
do
    # Check for null values of Bash variables:
    [[ -z $"$i" ]] && {
        printf "Syntax Error: Missing Operator see:\nmyfunction --help\n"
        exit
        }
done

-和-

# Error Checking
for i in ${1..4}
do
    # Check for null values of Bash variables:
    [[ -z $i ]] && {
        printf "Syntax Error: Missing Operator see:\nmyfunction --help\n"
        exit
        }
done

尝试的语法检查:

问题:

我想用 for 循环做的事情可行吗?

如有任何帮助,我们将不胜感激。

提前致谢!

编辑:

在我开始弄乱引号和美元符号之前还尝试了以下方法:

# Error Checking
for i in {1..4}
do
    [[ -z $"$i" ]] && {
        printf "Syntax Error: Missing Operator see:\nansi-color --help\n"
        exit
        }
done

有几种方法可以解决这个问题:

die () { echo "$@" >&2; exit 1; }

myfn () {
        [[ $# == 4 ]] || die 'wrong number of args'

        for d in "$@"; do [[ $d ]] || die 'null arg'; done
}

myfn2 () {
        [[ $# == 4 ]] || die 'wrong number of args'

        for ((i = 1; i <= $#; i++)); do
                [[ ${!i} ]] || die 'null arg'
        done
}

"$@" 可能更加地道。 ! 的间接寻址虽然不常见,但非常方便。

Caleb Adams 指出我可以尝试这样的事情:

# Error Checking
[[ $# != 4 ]] && {
    printf "Syntax Error: Missing Operator see:\n\tansi-color --help\n"
    exit
    }

就我个人而言,我会使用 bash 数组然后检查其长度:

  args=($*)
  echo ${#args[*]}

但是你可以这样做:

myfunc() { for i in {1..4}; do if [[ -z ${!i} ]]; then echo error at $i return -1 fi done ...do other stuff }