【问题标题】:Bash assignment with "let" fails with "/"带有“let”的 Bash 分配因“/”而失败
【发布时间】:2020-08-19 23:01:00
【问题描述】:

我正在使用 GNU bash,版本 5.0.3(1)-release (x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误:

#/bin/bash

var1=/tmp       # This works
let var2=/tmp   # This fails with syntax error: Operand expected (error is "/tmp")

有人知道为什么吗?谢谢

【问题讨论】:

  • help let 应该告诉你为什么......

标签: bash syntax-error variable-assignment


【解决方案1】:

let 是一个内置的 shell,它是在 bash 中使用 $((..)) Arithmetic Expansion 的另一种方式。任务

let var2=/tmp 

被 shell 视为具有不正确商值的算术运算“除法”。相当于做。

var=$((/tmp))

由于操作数数量不正确,解析器抛出了您所看到的错误。请注意,tmp 仍由 shell 在变量上下文中处理。如果解析器已将表达式识别为有效,则 tmp 将经历变量扩展。由于之前没有设置,可能会抛出“除零”错误。

对于简单的变量赋值,只需删除 let 关键字并将值字段括在“引号”内

var2="/tmp"

【讨论】:

    【解决方案2】:

    let 仅用于算术运算,就像(( ))

    因此,下面几行是一样的

    a=$((60 * 60))
    let a=(60*60)
    ((a = 60 * 60))
    

    请参阅manpage

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-21
      • 2016-09-04
      • 2014-01-08
      • 2022-10-23
      • 1970-01-01
      • 2015-10-20
      相关资源
      最近更新 更多