加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

在ZSH中捕获并测试输出命令

发布时间:2020-12-13 23:05:41 所属栏目:Linux 来源:网络整理
导读:我已经尝试了无数种方法来获得我想要的东西,但似乎没有任何效果.我总是得到像2这样的东西:没找到. 我想捕获命令的输出,然后测试它是否等于“
我已经尝试了无数种方法来获得我想要的东西,但似乎没有任何效果.我总是得到像2这样的东西:没找到.

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

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

我应该如何重写上面的代码以避免错误测试:2:=未找到?

解决方法

这应该工作:

if [ $testv = '!' ]; then

这里有几个问题:

> $(…)运行命令并替换其输出;您想要替换变量值,因此请使用$var或${var}.
>我不知道#在那里做了什么. ${#var}将获得$var的长度,但这不是你想要的.
>测试命令([是其同义词]不理解==,所以使用=(如果你是一个看起来不对的C程序员,但这是shell而不是C).
>我认为这不是脚本中的问题,而是交互式输入“!”不符合你的期望.我用了 ‘!’确保感叹号不能被解释为历史选项.

或者,您可以使用[[]]而不是[],因为它理解==(并且通常具有更清晰的语法):

if [[ $testv == '!' ]]; then

顺便说一下,我相信这个脚本在zsh中运行的标签;如果没有,语法将有点不同(基本shell没有[[]],除了zsh之外的任何东西都会对$testv的值进行不必要的解析,除非它是双引号).如果您不确定(或希望它是可移植的),这里的版本应该适用于任何符合posix的shell:

if [ "$testv" = '!' ]; then

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读