GNU bash,版本4.1.5(1)-发布-(i486-pc- Linux -gnu) Ubuntu Linux 10.04
这会将var打印为1234,但不会打印var2
#!/bin/bash
var=1234
while var=9876 var2=765 read line
do
echo $var $var2
echo $line
done <datafile
echo out of loop $varo/p
1234
This is line 1
1234
This is line 2
1234
This is line 3
1234
This is line 4
1234
This is line 5
1234
This is line 6
1234
out of loop 1234这会将var打印为9876,还会打印var2
#!/bin/bash
var=1234
while
var=9876
var2=765
read line
do
echo $var $var2
echo $line
done <datafile
echo out of loop $varo/p
9876 765
This is line 1
9876 765
This is line 2
9876 765
This is line 3
9876 765
This is line 4
9876 765
This is line 5
9876 765
This is line 6
9876 765
out of loop 9876为什么会这样呢?
发布于 2011-08-31 06:01:38
编辑我现在看到你的第一个脚本产生了1234的输出。之所以会发生这种情况,是因为var1的作用域是在主脚本中,但是read正在默默地使用var1和var2,因为它们的作用域是本地的,只需要一行var=9876 var2=764 Read...,如下所述。
主要起源于post:根据老派的unix,命令行可以包含预先挂起的变量赋值,其作用域只是紧随其后的命令。
所以你的台词
while var=9876 var2=765 read line
^--prepened Vars--^cmd^args按照^---指示的方式进行解析。
因为预先挂起的var只属于它们“附加”到的命令,在本例中是read,它们只对该进程可见。(read可能是一个内部命令,这可能是问题的一部分)。
相比之下,你的第二段代码,
while
var=9876
var2=765
read line每个var赋值都是在当前shell中执行的,它们不“属于”read命令,因为它们不会被导出。
感谢你的操作系统和bash版本,但这是bash、ksh、zsh和其他版本的“设计功能”。如果你只是出于对知识的好奇而想知道为什么会发生这种情况,那么你需要花时间阅读advanced bash scripting。如果这对你的代码来说是一个真正的问题,那么你将不得不发布一个新的问题,其中包含关于你试图实现的更多细节。
我希望这能帮到你。
https://stackoverflow.com/questions/7249976
复制相似问题