bash中的-z是什么

sta*_*rme 1 linux bash shell

我试图理解以下代码:

if [ -z "$1" ] || [ -z "$2" || [ "${3:-}" ]
then
  echo "Usage: $0 <username> <password>" >&2
  exit 1
fi
Run Code Online (Sandbox Code Playgroud)

我想了解我们的意思-z "$1",并"${3:-}"在代码中。还请帮助我>&2在代码中理解。

nsi*_*t22 5

1)您的代码不正确,您在]某处错过了一个括号。可能在[ -z "$2"阻塞之后。

2)if语句执行以下命令,然后如果命令的返回值为(它们的退出代码为 0),则执行包含在then .. fithen .. else关键字中的代码块true

3)[只是test命令 (try man test)的别名。此命令采用多个参数并对其进行评估。例如,如果未设置或为空字符串,与-z "$something"标志一起使用将返回true(0) $something。尝试一下:

if [ -z "$variable" ]; then
    echo Variable is not set or is an empty string
fi
Run Code Online (Sandbox Code Playgroud)

4)||语句是一个OR. 如果前一个返回false语句,则将执行下一个命令。所以在声明中

if [ -z "$variable" ] || [ -z "$variable2" ]; then
    echo Variable 1 or variable 2 is not set or is an empty string
fi
Run Code Online (Sandbox Code Playgroud)

命令[ -z "$variable2" ]只有在variable为空时才会执行。可以使用不同的语法实现相同的效果:

if [ -z "$variable" -o -z "$variable2" ]; then
    echo Variable 1 or variable 2 is not set or is an empty string
fi
Run Code Online (Sandbox Code Playgroud)

这应该更快,因为它只需要test运行一个程序实例。标志的-o意思是OR,所以你可以把它读为:如果variable没有设置/空或variable2没有设置/空...

5) 语句"[ ${3:-} ]"表示true如果$3(脚本的第三个参数)被设置则返回。

6)>&2是流重定向。每个进程都有两个输出:标准输出和错误输出。这些是独立的,可以重定向(例如)以写入两个不同的文件。>&2表示“将标准输出重定向到与标准错误相同的位置”。

所以总结一下:then .. fi如果脚本以$1空或$2空或非$3空运行,则将执行之间的命令这意味着脚本应该使用两个参数运行。如果没有,echo消息将打印到标准错误输出。