?[~]$ 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)
不要使用别名; 改为定义一些函数.
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 + )).