我正在修复一些我经常看到的旧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做什么吗?
答案 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)
[[ ... ]]
和[ ... ]
在if
和while
循环中使用的各种测试来自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 ]]
即使未设置这两个变量中的一个,也会起作用。
[[ ... ]]
语法采用[ ... ]
所做的所有相同的测试参数,现在是首选。