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

标签 shell

我有两个变量

var=""
var1=abcd

这是我的 shell 脚本代码
if [ $var == $var1 ]; then
  do something
else
  do something
fi

如果我运行此代码,它将提示警告
[: ==: unary operator expected

我该如何解决这个问题?

最佳答案

自值$var是空字符串,这个:

if [ $var == $var1 ]; then

扩展到这个:
if [ == abcd ]; then

这是一个语法错误。

您需要引用参数:
if [ "$var" == "$var1" ]; then

您也可以使用 =而不是 == ;这是原始语法,它更易于移植。

如果你使用 bash,你可以使用 [[语法,不需要引号:
if [[ $var = $var1 ]]; then

即便如此,引用变量引用并添加引号也没有坏处:
if [[ "$var" = "$var1" ]]; then

可能会为 future 的读者节省一点时间来记住是否 [[ ... ]]需要他们。

关于shell - 将空值与字符串进行比较时,shell 脚本中需要一元运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15573679/

相关文章:

bash - 在 bash 脚本中查找本月的最后一个星期六

c - execvp 跳过 C 中的某些代码

file - shell 每 n 行插入一行

shell - app.shell_context_processor 装饰器没有将该函数注册为 shell 上下文函数

linux - 使用 grep -n (data) file1.txt > file2.txt

linux - 在 unix 中执行 "jobs"命令时,+ 和 - 符号表示什么?

bash - 我可以在树中的所有文本文件(但不是二进制文件)中搜索某个字符串吗

linux - 捕获第三列到最后一列

Bash:以编程方式获取命令的完成输出(例如,在变量中)

linux - 如何获得与 sed 的第一场比赛?