如果设置某个变量,尝试设置规则,有人可以识别我在这里丢失的wtf吗?
test.sh:
#!/bin/bash
args=($@)
if [ "$@" = "--cron" ]; then
echo "WORKS!";
else echo "FAILS"
fi
./test.sh
的输出:
./test.sh: line 3: [: =: unary operator expected
FAILS
但是,当我运行./test.sh --cron
时,它会起作用,并输出WORKS
。
答案 0 :(得分:3)
执行此操作的正确方法会有所不同,具体取决于您要执行的操作。如果要检查第一个参数是否为--cron,请使用:
if [ "$1" = "--cron" ]; then
如果要检查 only 参数是否为--cron,请使用:
if [ "$*" = "--cron" ]; then
(请注意,这是极少数情况下"$*"
是正确做事的方法之一 - 它扩展到由空格分隔的所有参数,但作为单个单词用于解析目的。)
如果你想检查任何参数是否是--cron,请使用:
cronopt=false
for argument; do
if [ "$argument" = "--cron" ]; then
cronopt=true
break # note: if you are scanning the arguments for other things too, remove this
fi
done
if $cronopt; then
...
BTW,我不确定你使用args=($@)
行的是什么,但是如果你想将参数存储在一个数组中,正确的方法就是args=("$@")
- 在将args放入数组之前,引号不会进行单词拆分,文件名扩展等。
答案 1 :(得分:1)
这应该可行,但只有第一个元素,你想要更多,你可能需要做for
或while
循环来迭代参数。
#!/bin/bash
args=($1)
if [ $args ] && [ $args = "--cron" ]; then
echo "WORKS!";
else echo "FAILS"
fi
答案 2 :(得分:0)
在这种情况下,我认为"$@"
引用得太好了。
尝试与"$1"
进行比较,或使用:
#!/bin/bash
args=($@)
if [ "$*" = "--cron" ]; then
echo "WORKS!";
else
echo "FAILS"
fi