带'+'操作数的Bash错误//引用误用

Pos*_*llo 0 bash quotes alias

?[~]$ alias hdd='echo ?= $(($(df -BMB /dev/sdb1 --output=used | tail -1 | grep -o '[0-9]*')+$(df -BMB /dev/sdc1 --output=used | tail -1 | grep -o '[0-9]*'))) Mb'
Run Code Online (Sandbox Code Playgroud)

这个别名突然停止了它的工作:

?[~]$ hdd
bash: +: syntax error: operand expected (error token is "+")
Run Code Online (Sandbox Code Playgroud)

但命令仍然有效:

?[~]$ echo ?= $(($(df -BMB /dev/sdb1 --output=used | tail -1 | grep -o '[0-9]*')+$(df -BMB /dev/sdc1 --output=used | tail -1 | grep -o '[0-9]*'))) Mb
?= 3782845 Mb
Run Code Online (Sandbox Code Playgroud)

che*_*ner 5

不要使用别名; 改为定义一些函数.

get_space_used () {
    df -BMB "$1" --output=used | tail -1 | grep -o '[0-9]*'
}
hdd () {
    sdb1=$(get_space_used /dev/sdb1)
    sdc1=$(get_space_used /dev/sdc1)
    echo "$(( sdb1 + sdc1 ))"
}
Run Code Online (Sandbox Code Playgroud)

这使得引用更容易,重构代码重复,并且更容易确定出现错误时的问题.在你的情况下,第二个df管道出现问题,因为bash它试图执行类似的操作echo $(( foo + )).