分页: 1 / 1
shell 变量作用域的问题
发表于 : 2011-09-14 23:36
由 kusamba
代码: 全选
#!/bin/sh
set -xv
var="this is a test"
export var
grep "a" 01.txt | while read line
do
aVar=`echo ${line} | awk '{print $1}'`
if [ "${aVar}" = "b" ]
then
var="bbb"
break
fi
done
echo $var
01.txt:
a user1@password1
b user2@password2
c user3@password3
为什么var还是"this is a test"?var在循环中确认赋过值的
Re: shell 变量作用域的问题
发表于 : 2011-09-14 23:51
由 我就是我2
#!/bin/sh
zsh没有问题。
或者使用下面的代码
代码: 全选
#!/bin/sh
set -xv
var="this is a test"
export var
for i in `grep "a" 01.txt`;
do
.....
then
var="bbb"
break
fi
done
echo "$var"
问题应该是在read命令上。
代码: 全选
#!/bin/sh
set -xv
var="this is a test"
export var
for i in `awk '/a/ && $1=="b"{print $1}' 01.txt`;
do
if [ "${i}" = "b" ]
then
var="bbb"
break
fi
done
echo "$var"
Re: shell 变量作用域的问题
发表于 : 2011-09-15 20:10
由 ebok
sh,bash在管道后的变量相当于局部变量,圆括号中的子shell也一样。
Re: shell 变量作用域的问题
发表于 : 2011-09-17 14:06
由 tusooa
代码: 全选
grep "a" 01.txt | while read line
有管道,就会起子shell了。
代码: 全选
while read line ; do something ; done <<< "$(grep a 01.txt)"
这样估计可以
Re: shell 变量作用域的问题
发表于 : 2011-09-17 17:07
由 fnan
#!/bin/sh
set -xv
var="this is a test"
export var
grep "a" 01.txt | (while read line
do
aVar=`echo ${line} | awk '{print $1}'`
if [ "${aVar}" = "b" ]
then
var="bbb"
break
fi
done
echo $var)
或者:
set -xv;var="this is a test";grep -q '^b .*a' 01.txt;if [ $? -eq 0 ]; then var="bbb";fi;echo $var