为了账号安全,请及时绑定邮箱和手机立即绑定

Bash变量范围

Bash变量范围

PIPIONE 2019-10-08 10:50:07
请向我解释为什么最后echo一句话是空白的?我希望XCODE在while循环中将其增加到1:#!/bin/bashOUTPUT="name1 ip ip status" # normally output of another command with multi line outputif [ -z "$OUTPUT" ]then        echo "Status WARN: No messages from SMcli"        exit $STATE_WARNINGelse        echo "$OUTPUT"|while read NAME IP1 IP2 STATUS        do                if [ "$STATUS" != "Optimal" ]                then                        echo "CRIT: $NAME - $STATUS"                        echo $((++XCODE))                else                        echo "OK: $NAME - $STATUS"                fi        donefiecho $XCODE我尝试使用以下语句代替++XCODE方法XCODE=`expr $XCODE + 1`并且它也不会在while语句之外打印。我认为我在这里缺少有关变量范围的信息,但是联机帮助页没有向我显示。
查看完整描述

3 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

问题在于,与管道放在一起的进程在子外壳程序中执行(因此具有自己的环境)。while管内发生的任何事情都不会影响管道外部的任何内容。


您的具体示例可以通过将管道重写为


while ... do ... done <<< "$OUTPUT"

也许


while ... do ... done < <(echo "$OUTPUT")


查看完整回答
反对 回复 2019-10-08
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

另一种选择:


#!/bin/bash

cat /some/file | while read line

do

  var="abc"

  echo $var | xsel -i -p  # redirect stdin to the X primary selection

done

var=$(xsel -o -p)  # redirect back to stdout

echo $var

编辑:在这里,xsel是一项要求(安装它)。另外,您可以使用xclip:  xclip -i -selection clipboard 代替  xsel -i -p


查看完整回答
反对 回复 2019-10-08
  • 3 回答
  • 0 关注
  • 533 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信