bash中heredocs和复合命令的优先级

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" #/

我希望我的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使用大括号将命令分组:

(($#)) || { 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"