我想做一个非常简单的脚本:只想在我的计算机上找到最新版本的程序svn。我想要的结果装载到一个变量,说mysvnBash - 对变量的赋值错误
所以我有这样的脚本:
#!/bin/sh
mysvn="foobar"
best_ver=0
which -a svn | while read p
do
version=$("$p" --version | grep 'version ' | grep -oE '[0-9.]+' | head -1)
if [[ "$version" > "$best_ver" ]]
then
best_ver=$version
mysvn="$p"
fi
echo $mysvn
done
echo $mysvn
其实很简单......但它并不下的rxvt工作(我的伪Linux终端) ,版本2.7.10,在XP下运行:最终的输出字符串是foobar。
有人知道我为什么有这个问题吗?
我过去几个月一直在写一些脚本,这是我第一次遇到这样的行为。
注:我知道如何使它工作,有几个变化(只是把主线到$())
尝试做'temp = $(which -a svn)'然后'在$ temp中为p'我认为这个管道是你的问题,但是现在没有办法测试它。 – 2012-07-06 14:38:37
@izomorphius:把它写成解决方案。问题的确是管道导致while循环在子shell中执行,所以对'mysvn'的任何赋值对于该shell都是本地的。 – chepner 2012-07-06 14:53:52