gpt4 book ai didi

zsh - 在 ZSH 中捕获和测试输出命令

转载 作者:行者123 更新时间:2023-12-05 01:32:04 30 4
gpt4 key购买 nike

我尝试了无数方法来获得我想要的东西,但似乎没有任何效果。我总是得到类似 2:not found 的结果.

我想捕获命令的输出,然后测试它是否等于“!”,如下所示:

function test() {
local testv=$(command) 2>/dev/null
if [ $(#testv) == "!" ]; then
echo "Exclamation mark!"
else
echo "No exclamation mark."
fi
}

我应该如何重写上面的代码以避免错误 test:2: = not found ?

最佳答案

这应该有效:

if [ $testv = '!' ]; then

这里有几个问题:
  • $(...)运行命令并替换其输出;你想替换一个变量值,所以使用 $var${var} .
  • 我不知道是什么#在那里做。 ${#var}将获得 $var 的长度,但这不是您想要的。
  • test命令(其中 [ 是其同义词)不理解 == ,所以使用 = (如果你是一个 C 程序员,那看起来会错,但这是 shell 而不是 C)。
  • 我不认为这是脚本中的问题,但对于交互式输入 "!"不会做你期望的。我用过 '!'确保感叹号不能被解释为历史选项。

  • 或者,您可以使用 [[ ]]而不是 [ ] ,既然它明白 == (并且总体上具有更清晰的语法):
    if [[ $testv == '!' ]]; then

    顺便说一句,我相信这个脚本正在 zsh 中运行;如果没有,语法会有点不同(基本 shell 没有 [[ ]] ,除了 zsh 之外的任何东西都会对 $testv 的值进行不必要的解析,除非它是在双引号中)。如果您不确定(或希望它是可移植的),这里有一个可以在任何兼容 posix 的 shell 中工作的版本:
    if [ "$testv" = '!' ]; then

    关于zsh - 在 ZSH 中捕获和测试输出命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9347878/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com