bash中heredocs和复合命令的优先级
我希望我的shell脚本打印出一条简单的使用说明,然后在没有参数的情况下调用它时退出。以下是我尝试过的:bash中heredocs和复合命令的优先级,bash,operator-precedence,heredoc,Bash,Operator Precedence,Heredoc,我希望我的shell脚本打印出一条简单的使用说明,然后在没有参数的情况下调用它时退出。以下是我尝试过的: #!/bin/bash (($#)) || cat <<EOF && exit Lorem ipsum dolor sit amet, consectetur adipiscing elit. Usage: Donec a diam lectus. EOF echo "You have provided at least one argument" #/
#!/bin/bash
(($#)) || cat <<EOF && exit
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Usage: Donec a diam lectus.
EOF
echo "You have provided at least one argument"
#/bin/bash
($)| | cat使用大括号将命令分组:
(($#)) || { cat <<EOF && exit
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Usage: Donec a diam lectus.
EOF
}
echo "You have provided at least one argument"
here文档不影响优先级。如果你有echo foo
而不是cat good answer,你也会遇到同样的问题。我会使用else
分支,而不是exit
ing如果只是几行,那就好了。但我不喜欢在else
块中有一个几乎完整的长脚本。没错,但这看起来不必要的神秘。说出你的意思有什么不对?如果要将一个数字与0
进行比较,请编写==0
。尽管,[[$#-eq 0]]
将是正确的数字比较。或者($#==0))
是的,尽管在这种情况下数字和字符串比较之间的区别并不太重要。当可以使用字符串值时,不要使用数字比较,这一点很重要,但对数字使用字符串比较通常是安全的。
if [[ $# == 0 ]]
then cat <<EOF && exit
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Usage: Donec a diam lectus.
EOF
fi
echo "You have provided at least one argument"