在bash if语句中,-n和-a选项有什么作用?

前端之家收集整理的这篇文章主要介绍了在bash if语句中,-n和-a选项有什么作用?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > List of ‘if’ switches anywhere?5个
-a和-n选项在以下bash if语句中执行什么功能
if [ -n "$1" -a -n "$2" -a -n "$3" ]; then
    REFNAME=$(basename $3)
else

Are-a和-n所谓的primaries

-a文件是否意味着“如果文件存在则为True”.

挑剔

交换机-a和-n不是bash if语句的一部分,因为if命令不处理这些开关.

什么是初选?

我称之为“开关”,但是您链接的bash文档与“初级”相同(可能是因为这是在讨论布尔表达式的部分时使用的常用术语).

背景和文件

在sh脚本中,如果是以命令为参数的命令,则执行它并测试其返回码.如果返回代码为0,则执行到之后的代码块,直到关闭fi或(如果提供)以下其他.如果返回代码不是0并且提供了一个else语句,那么代码跟随else将被执行直到关闭fi.

如果命令为true或命令false,那么可以看到这个效果,它们是不做任何事情的简单命令,分别返回0和非0.

if true ; then echo true was true ; else echo true was false ; fi
if false ; then echo false was true ; else echo false was false ; fi

在示例代码中,您提供了您传递给的命令,如果是[,这也有时被称为测试.这是你要询问的开关的这个命令.在bash中,测试命令将是一个内置命令;尝试类型[学习它的类型.对于内置命令,帮助将显示用法,因此也可以运行帮助[查看文档.您的系统可能还有一个/ bin / [和/ bin / test,如果你测试你可以看到那些手册.虽然内置测试的行为可能与手册页中记录的行为可能不一致,这可能比简单描述更详细,您可以从帮助中获得[,它可能会描述内置的行为[命令相当准确.

-a和-n的行为

知道您正在运行的命令是测试,我们可以咨询帮助测试或人员测试并阅读其用法.这将显示-n测试以下参数,如果它不是空字符串,则计算结果为true.

在测试的文档中,您还将看到一个开关-e.此开关测试以下参数,如果该参数是存在的文件或目录,则计算结果为true.更有用的仍然是-f开关,如果以下参数存在并且是常规文件(与目录或块设备或其他任何内容相对),它将评估为true.

你的混淆的根源可能是可以有两种形式的-a:一元和二进制.当在一元上下文中使用-a时,这是一个以下参数,但没有前面的参数,它将其参数视为文件,并测试其存在,就像-e开关一样.然而,当在二进制上下文中使用-a时,就是在它之前有一个参数,在它之后有一个参数,它将其参数视为其他条件并充当布尔AND运算符.

为了便于携带,重要的是要注意,unary -a是POSIX中won’t be found的非标准扩展.然而,它在bash和ksh中可用,所以使用可能是广泛的.

cd /tmp
if [ -a test-file ] ; then
    echo 1: test-file exists
else
    echo 1: test-file missing
fi

touch test-file

if [ -a test-file ] ; then
    echo 2: test-file exists
else
    echo 2: test-file missing
fi

var=somerthing
if [ -n "$var" -a -a test-file ] ; then
    echo variable var is not empty and test-file exists
fi
rm -f test-file

猜你在找的Bash相关文章