"shell function" 或 "alias" 是否适合此用途

Would a "shell function" or "alias" be appropriate for this use

我目前正在尝试创建一个别名或 shell 功能,我可以 运行 检查我的电池寿命,以尝试熟悉别名和 bash。我 运行 遇到了一个问题,我没有从我的命令中收到任何反馈,也无法验证它是否有效,或者我是否遗漏了任何可以给我想要的结果的步骤。

当前 .bashrc 别名:

alias battery='upower -i $(upower -e | grep -e 'BAT'| grep -E "state|to\ full|percentage")'

预期用途:

b@localhost:~$ battery

想要的结果:

state: discharging Time to empty: x.x Hours percentage: xx%

我已经阅读了 bash 参考资料,可能对我有帮助。我找不到任何我认为适用于此的内容。感谢您的考虑!

正如@bannji 在评论中宣布的那样,他已经修复了他的命令。
旧的错误别名

'upower -i $(upower -e | grep -e 'BAT'| grep -E "state|to\ full|percentage")'

新的正确别名

'upower -i $(upower -e | grep -e "BAT") | grep -E "state|to\ full|percentage"'

大多数评论都在谈论引语的解释。那不是这里的问题。主要区别在于关闭子命令的位置。在第一种情况下,子命令在最后一个 grep 之后关闭,su upower -i 什么也得不到。
在第二个命令中,第二个 grep 将过滤 upower -i 的输出。

引号的不同在另一个例子中很有趣。

addone() {
    ((sum=+1))
    echo "${sum}" 
}
i=1
alias battery='addone $(addone $i)'
i=4
battery
# other alias
i=1
alias battery2='addone $(addone '$i')'
i=4
battery2

两个电池命令都会尝试将 $i 的值加 2,但会给出不同的结果。
命令 battery 会将 2 添加到 $i 的当前值 4,结果是 6.
命令 battery2 将在定义别名时将 2 添加到 $i 的值,结果为 3.
为什么?
在 battery2 中,字符串 $i 被单引号包围,但这些单引号位于其他单引号内。结果是 $i 被评估,别名被定义为

alias battery2='addone $(addone 2)'