我正在运行一些传递字符串参数的脚本,并且我想执行如下所示的 if else 语句:
if [ $1 != '' ] && [ $2 != '' ]
then
do something.....
但它显示了Error too many argument
。为什么?
答案1
尝试使用 -z 测试:
if [ -z "$1" ] && [ -z "$2" ]
来自 man bash
:
-z string
True if the length of string is zero.
答案2
由于这是标记的bash
,我建议使用扩展测试构造 ( [[...]]
),忘记引号:
if [[ -z $1 && -z $2 ]]; then
...
除非您要实现sh
/POSIX 兼容性,否则没有理由不使用[[ ]]
。
答案3
下面的方法也适用,
if [ "$1" == "" && "$2" == ""]; then
echo NULL
fi
答案4
我认为帖子的标题不准确,因为消息中的意图是检查 $1 和 $2 是否不为空。给出的示例只是缺少 $1 和 $2 中的双引号才能工作。比较字符串时,变量必须用双引号括起来才能展开。但是,检查 $1 和 $2 是否存在与检查 $2 是否存在相同,因为如果 $1 不存在,它就不可能存在。在这种情况下也不需要“if”命令,因为“test”返回 true/false,并且如果返回 0/true,则使用“&&”作为“then”:
[ "$2" != '' ] && commands...
更简单,使用 -n (非零):
[ -n "$2" ] && commands...
“检查 $1 和 $2 是否为空”与检查是否没有参数相同:
[ $# -eq 0 ] && commands...