Bash检测第一个输入参数是否为“调试”?

lin*_*bin 1 bash if-statement

我想检测第一个bash输入参数是否为“ debug”(字符串)。

我写这样的脚本:

#! /usr/bin/env bash

if [ "$#" -eq "1" && "$1" -eq "debug" ]; then
    echo "hello debug"
fi
Run Code Online (Sandbox Code Playgroud)

错误信息:

line 3: [: missing `]'
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,请帮忙。

vlu*_*umi 5

用比较字符串==-eq是算术运算符。另外,[]您必须使用-a而不是运算符&&,或将其分成两部分。以下是写同一件事的几种不同方法:

if [[ $# -eq 1 && "$1" == "debug" ]] ; then
    echo "hello debug"
fi
Run Code Online (Sandbox Code Playgroud)
if [[ "$#" == "1" && "$1" == "debug" ]] ; then
    echo "hello debug"
fi
Run Code Online (Sandbox Code Playgroud)
if [ "$#" == "1" ] && [ "$1" == "debug" ] ; then
    echo "hello debug"
fi
Run Code Online (Sandbox Code Playgroud)
if [ "$#" == "1" -a "$1" == "debug" ] ; then
    echo "hello debug"
fi
Run Code Online (Sandbox Code Playgroud)

  • 最好分成两部分;`-a` 是非标准的,并被 POSIX 视为已过时。 (2认同)