2014-04-01 46 views
1

我有以下腳本:Bash。 shell變量邏輯

ls -l | while read permissions number user user2 size month day hour filename 
    do 
    if [[ "$filename" == *foo* ]] 
    then 
     scount=`expr $scount + $size` 
    fi 
    done 
echo $scount 

腳本檢查我的文件夾中的文件的文件名和大小,然後它會檢查包含「富」字的文件,那麼它需要它的大小和添加它。

我有以下問題,如果我從循環內部調用scount變量顯示數字,但是當它在外面時,它不顯示任何內容,就好像該變量不存在一樣。它與shell會話有關嗎?如何在循環外部顯示變量?

+0

只是一個猜測,但也許你必須聲明你的變量在循環之外:-) – Gudgip

+5

你正在操縱一個子shell中的變量。參考鏈接的問題獲取答案。 – devnull

+0

作爲一個旁註:寧可使用'stat'而不是'ls'來解析關於文件的信息。如果你想計算給定數量的文件的大小,那麼看看'du'。 – Saucier

回答

1

您的while循環運行在子外殼中,因此其變量在外面不可見。試試這個:

#!/bin/bash 

while read current; do 
    echo "current: $current" 
    last=$current 
done < <(echo -e "foo\nbar\nbaz") 

echo "last: $last" 
+0

謝謝。我已經使用Josh Jolly和devnull的建議重寫了代碼,現在它的功能正常。謝謝你們。 – user3214667