shell脚本中可以设置全局变量么
1个回答
展开全部
因为 管道符 会新建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环境中。
你这里 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环境中。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询