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

带'的Bash错误+';操作数//引号误用,bash,alias,quotes,Bash,Alias,Quotes,此别名突然停止工作: ☿[~]$ 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' 但该命令仍然有效: ☿[~]$ hdd bash: +: syntax error: operand expected (error token is

此别名突然停止工作:

☿[~]$ 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'
但该命令仍然有效:

☿[~]$ hdd
bash: +: syntax error: operand expected (error token is "+")

不要使用别名;而是定义一些函数

☿[~]$ 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

这使得引用更容易,重构重复的代码,并且在发生错误时更容易查明问题所在。在您的例子中,第二个
df
管道出现了问题,因为
bash
试图执行类似
echo$((foo+)
,不要使用别名;而是定义一些函数

☿[~]$ 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

这使得引用更容易,重构重复的代码,并且在发生错误时更容易查明问题所在。在您的例子中,第二个
df
管道出现问题,因为
bash
试图执行类似
echo$((foo+)
突然停止
意味着
以前正在工作
?您试图以一种不起作用的方式嵌套引用操作符(整个别名周围用撇号,正则表达式周围用撇号)。因此,您的
[0-9]*
实际上是不带引号的,并且会被shell进行全局搜索,因此行为取决于当前目录中是否有以数字开头的文件名。我建议使用
“[0-9]*”但是,因为撇号和引号之间的差异对于ReExpEx.SjsAM中的字符并不重要,是的,它在系统更新之前起作用。Wumpus,非常感谢!(……虽然Wumpus的评论是正确的,顺便说一下,我也必须考虑Chepner的答案是正确的——如果你不想(AB)的话。使用别名,一开始就不会出现这种情况。任何在freenode#bash频道中询问别名的人都有一个原因,他们的第一个答案是“使用函数代替”).
突然停止
表示
以前正在工作
?您试图以一种不起作用的方式嵌套引用运算符(在整个别名周围加上撇号,在正则表达式周围加上撇号)。因此,
[0-9]*
实际上是不带引号的,并且由shell进行全局搜索,因此行为取决于当前目录中是否有以数字开头的文件名。我建议使用
“[0-9]*”但是,因为撇号和引号之间的差异对于ReExpEx.SjsAM中的字符并不重要,是的,它在系统更新之前起作用。Wumpus,非常感谢!(……虽然Wumpus的评论是正确的,顺便说一下,我也必须考虑Chepner的答案是正确的——如果你不想(AB)的话。使用别名,一开始就不会出现这种情况。任何在freenode#bash频道中询问别名的人都有一个原因,他们的第一个答案是“使用函数”)。完美建议++完美建议++