将null值与字符串进行比较时,在shell脚本中需要一元运算符

Uva*_*him 29 shell

我有两个变量

var=""
var1=abcd
Run Code Online (Sandbox Code Playgroud)

这是我的shell脚本代码

if [ $var == $var1 ]; then
  do something
else
  do something
fi
Run Code Online (Sandbox Code Playgroud)

如果我运行此代码,它将提示警告

[: ==: unary operator expected
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

Kei*_*son 87

由于值为$var空字符串,因此:

if [ $var == $var1 ]; then
Run Code Online (Sandbox Code Playgroud)

扩展到这个:

if [ == abcd ]; then
Run Code Online (Sandbox Code Playgroud)

这是一个语法错误.

你需要引用参数:

if [ "$var" == "$var1" ]; then
Run Code Online (Sandbox Code Playgroud)

你也可以使用=而不是==; 这是原始语法,而且更加便携.

如果您正在使用bash,则可以使用[[不需要引号的语法:

if [[ $var = $var1 ]]; then
Run Code Online (Sandbox Code Playgroud)

即使这样,引用变量引用并添加引号也没什么坏处:

if [[ "$var" = "$var1" ]]; then
Run Code Online (Sandbox Code Playgroud)

可能会为将来的读者节省一些时间,试图记住[[...... 是否]]需要它们.