shell脚本中可以设置全局变量么?

a="hehe"ls-ltr|whilereadlinedoa="wuwu"echo"$a"doneecho"$a"输出:wuwuhehe要如何设置才可使的a的第二次输出... a="hehe"
ls -ltr|while read line
do
a="wuwu"
echo "$a"
done
echo "$a"
输出:
wuwu
hehe

要如何设置才可使的a的第二次输出成为wuwu
展开
 我来答
百度网友5311d79
2014-12-18 · TA获得超过1.9万个赞
知道大有可为答主
回答量:6356
采纳率:71%
帮助的人:3122万
展开全部

因为 管道符 会新建shell来执行后面的while语句,a的值在新建shell中被改写。

你这里 ls 的结果只有一条,所以while循环只执行一次就退出了,从新建shell回到原shell,a的新值不会被带出来,还是"hehe"。


用输入重定向来替换管道符就行了,例如可以这样:

a="hehe"
while read line
do
    a="wuwu"
    echo "$a"
done <`ls -ltr`
echo "$a"
追问

不行额,报错的

追答

我没环境测试,再改一下:

a="hehe"
ls -ltr | ( while read line
do
    a="wuwu"
    echo "$a"
done
echo "$a" )

用小括号使得最后的 echo "$a" 与 while 语句在同一个shell环境中。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式