变量扩展中冒号的用途

The*_*Guy 2 linux shell shell-script

我正在审查一个旧的 shell 脚本。我无法理解其中的两件事。

rm /data/log || true

value=$(cat /datafile)
if [ ${value: -1} ==  0 ] 
 then echo 'do'
else echo 'dont'
 fi
Run Code Online (Sandbox Code Playgroud)
  1. value: -1 - 这实际上是在做什么?
  2. rm /data/log || true- 这是||true做什么?

gle*_*man 8

${value: -1}扩展到变量内容的最后一个字符

${value:-1}不同${value: -1}

参考手册中的Shell参数扩展

  1. ${value:-1}扩展为value变量的内容,或者如果变量未设置或为空,则扩展为字符串“1”

  2. ${value: -1}${var:offset:length}提取变量内容子串的形式的缩写形式。偏移量-1表示“距字符串末尾一个字符”。该:length部分丢失,因此从字符串offset的末尾获取子字符串。

    手册上说:

    请注意,负偏移量必须与冒号隔开至少一个空格,以避免与 ':-' 扩展混淆。