我想做一個非常簡單的腳本:只想在我的計算機上找到最新版本的程序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