什么是在[bash]中使用的[[-n variable]]语法

时间:2013-10-28 07:14:20

标签: bash shell

我正在修复一些我经常看到的旧bash脚本

if [[ -n $VARIABLE ]]; then 

语法我试图谷歌但它可以找到为什么使用“-n”, 以下是我所知道的

Comparisons:
  -eq   equal to
  -ne   not equal to
  -lt   less than
  -le   less than or equal to
  -gt   greater than
  -ge   greater than or equal to

文件操作:

  -s    file exists and is not empty
  -f    file exists and is not a directory
  -d    directory exists
  -x    file is executable
  -w    file is writable
  -r    file is readable

有人会让我知道-n做什么吗?

3 个答案:

答案 0 :(得分:9)

help test会告诉你:

String operators:

  ....

  -n STRING
     STRING      True if string is not empty.

答案 1 :(得分:3)

如果$VARIABLE是字符串,那么[ -n $VARIABLE ]如果$VARIABLE的长度非零,则为[ -n $VARIABLE ]

此外,[ $VARIABLE ]$VARIABLE相同,当且仅当{{1}}是字符串时。

更多关于:Introduction to if

答案 2 :(得分:0)

[[ ... ]][ ... ]ifwhile循环中使用的各种测试来自Unix test命令本身。查看这些不同测试的简单方法是查看test联机帮助页。

在Unix中,/bin/[命令实际上是/bin/test命令的硬链接。在早期的Unix系统中,你会写这个:

if test -n $parameter
then
    echo "Parameter has a value"
fi

if test $foo = $bar
then
    echo "Foo and Bar are equal"
fi

/bin/[已创建,因此您可以执行此操作:

if [ -n $parameter ]
then
    echo "Parameter has a value"
fi

和这个

if [ $foo = $bar ]
then
    echo "Foo and Bar are equal"
fi

这解释了为什么有趣的语法以及为什么你需要方括号和里面的参数之间的空格。

[[ ... ]]实际上是一个 Korn shellism ...我的意思是一个POSIX贝壳主义,BASH已经采取 借用。它被引入以允许模式匹配测试([[ $foo == bar* ]])并且是shell的内部,因此它对shell命令行扩展问题不太敏感。例如:

if [ $foo = $bar ]
如果在以下情况下未设置$foo$bar,则

将失败:

if [[ $foo = $bar ]]
即使未设置这两个变量中的一个,

也会起作用。

[[ ... ]]语法采用[ ... ]所做的所有相同的测试参数,现在是首选。