在脚本文件中使用star作为命令行参数时出错

时间:2016-05-09 17:36:16

标签: bash

当我尝试执行我的脚本qwer.bash时:

bash qwer.bash *whatever #whatever can really be anything

它会回馈给我:

qwer.bash: line 5: [[: *whatever: syntax error: operand expected (error token is "*whatever")

这是我的剧本:

    #!/bin/bash

    declare -a files

    while [[ "$1" -ne "-p" ]]
    do
            echo "pwet"
            shift
    done

如何避免产生此错误?

2 个答案:

答案 0 :(得分:1)

这是因为当$1 -ne ...不是整数时,测试$1会产生错误。

试试这个:

while [[ "${#}" > 0 && "${1}" != "-p" ]]; do
    echo "pwet"
    shift
done

执行shift时,${#}会递减。

"${#}" > 0为false时,while循环结束。请注意,当&&已经为假时,"${1}" != "-p"会指示shell 评估第二个操作数("2016-05-03T19:17:00.434Z")。

答案 1 :(得分:1)

虽然这与你的情况无关

关于

bash qwer.bash *whatever #whatever can really be anything

案例1:如果*whatever是针对glob文件的话:

bash qwer.bash ./*whatever

bash qwer.bash -- *whatever # here -- marks the end of options

./qwer.bash -- *whatever # you already have a shebang in your script.

这是为了处理当前文件夹中实际上有一个名为-file-with-dash的文件的情况,该文件可能错误地作为选项

案例2:如果*whatever只是一个字符串:

bash qwer.bash \*whatever

bash qwer.bash "*whatever"