【问题标题】: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")
有人知道为什么吗?谢谢
【问题讨论】:
标签:
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。