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



我希望我的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"

(特殊的 bash 变量$#保存参数的数量,用双括号括起来使其在没有参数时计算为 false)。

这在没有参数时有效,但如果参数,则会立即退出而不打印任何内容。我认为这是由于运算符的优先级错误。如何修复此脚本以执行我想要的操作?

使用大括号对命令进行分组:

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

或者你可以放弃紧凑的格式,并使用if

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"

最新更新