Shell 用zsh打印文件

Shell 用zsh打印文件,shell,return-value,zsh,zshrc,Shell,Return Value,Zsh,Zshrc,我正在写我的.zshrc。我希望我的提示显示我的电池电量,它存储在 /sys/class/power\u supply/BAT0/capacity 我编写了一个函数,它将从文件中获取值并更改数字的颜色(如果大于50,则为绿色,如果大于20,则为橙色,否则为红色) 问题是我明白了: /home/user/.zshrc:5: parse error: condition expected: $getPower 我的zshrc为$getPower函数显示了这一点 3 function getPowe

我正在写我的.zshrc。我希望我的提示显示我的电池电量,它存储在
/sys/class/power\u supply/BAT0/capacity
我编写了一个函数,它将从文件中获取值并更改数字的颜色(如果大于50,则为绿色,如果大于20,则为橙色,否则为红色)

问题是我明白了:

/home/user/.zshrc:5: parse error: condition expected: $getPower
我的zshrc为$getPower函数显示了这一点

3 function getPower ()
4 {
5     cat /sys/class/power_supply/BAT0/capacity
6 }
7 function batteryLeft  ()
8 {
9     if [[ getPower > 50 ]]; then
10        echo "Phrase"
11    fi
12}

在前两个代码示例中,有两种不同的方法来声明函数,一种是使用
function
关键字,另一种是不使用关键字。不确定问题出在哪里。

值得注意的是,此代码中没有特定于zsh的内容——下面使用的所有扩展都出现在ksh93和bash中

getPower() { cat /sys/class/power_supply/BAT0/capacity; }

batteryLeft() {
    if (( $(getPower) > 50 )); then
        echo "Phrase"
    fi
}
  • 函数
    关键字使您的代码与基线POSIX shell不兼容,但与兼容语法相比没有任何优势。作为一种良好做法,请避免使用它
  • 要运行函数并对其输出进行操作,需要使用命令替换,例如
    $()
  • 要运行数字比较而不是字符串比较,您需要使用
    (())
    代替
    [[]]
    ,或者使用
    -gt
    代替
    (这与基线POSIX不兼容——您需要使用
    [“$(getPower)”-gt 50]
    可以与其他shell一起使用,但也具有补偿优势)

该函数定义是否位于.zshrc的第5行或其附近?如果不是,请您的问题添加第5行的内容(以及附近的内容,实际问题可能在其他地方)。如果你的.zshrc相对较短,你应该发布整个内容。如果它较长,你应该做一个提示来说明这个问题。不确定它是否重要,但你的消息是
$get power
,而不是
$getPower
。另外,你是否需要在ZSH中的函数名后面加上paren,就像在Bash中一样?谢谢大家,我正在我的p上键入这个hone,所以有一些输入错误我只是做了一个快速测试,准确地重新创建了这个函数,并在zsh 5.1.1中运行它,没有出现任何问题(好吧,cat抱怨丢失了一个具有确切路径的文件,但这不是问题所在)。因此,问题一定在别处。这可能与您将
getPower
称为
$getPower
有关(您通常不使用
$
调用函数)。为了确定,我需要看更多的代码。这里有用的一个扩展是用
echo
@TimPalmer,不,只是
作为整个函数体;因此,
getPower(){
——与bash不同,zsh的内置行为在这种情况下相当于
cat
,但是(正如切普纳所说)没有使用外部进程的启动开销。将内容重定向到
echo
的stdin没有任何用处,因为
echo
不会从其stdin读取内容。