Bash 使用 "let" 的赋值失败并显示“/”

Bash assignment with "let" fails with "/"

我正在使用 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")

有人知道为什么吗?谢谢

let仅用于算术运算,与(( )).

一样

因此,后面几行是一样的

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

参见manpage

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

let var2=/tmp 

被 shell 视为具有不正确商值的算术运算 "division"。相当于做了。

var=$((/tmp))

由于操作数的数量不正确,解析器抛出了您所看到的错误。请注意,tmp 仍由 shell 在变量上下文中处理。如果解析器已将表达式识别为有效,则 tmp 将进行变量扩展。由于之前未设置,因此可能会引发 "division-by-zero" 错误。

对于简单的变量赋值,只需删除 let 关键字并将值字段括在 "quotes"

var2="/tmp"