2011-05-03 24 views
0

我想有一個shell變量,可以在每次引用時動態運行,例如,我想要一個變量$ countPwd,它可以返回當前目錄中文件/目錄的數量,它可以是定義爲:如何在bash中定義動態變量?

countPwd=`ls | wc -l` 

,如果我做echo $countPwd它只會顯示的值時,我定義變量,但是當我改變我的當前目錄它不會自動更新。那麼,如何在bash中定義這樣一個變量,以便它的值更新/計算?

更新: $ PWD是一個實時評估變量的完美例子。您不需要使用$()或反引號``來評估它。它在bash中如何定義?

+1

爲'cd'編寫一個封面函數,用於在更改目錄時設置變量。或者創建一個腳本或函數(可能'fc'代表'文件計數'),並簡單地使用它(少打字)。 – 2011-05-03 19:38:51

回答

6

做一個函數:

countPwd() { 
    ls | wc -l 
} 

然後調用函數就像任何其他命令:

echo "There are $(countPwd) files in the current directory." 
+0

但這不是一個變量,所以我仍然不能做echo $ countPwd。換句話說,我想在bash中有一個類似於$ PWD的變量。 $ PWD是一個實時評估變量的完美例子。它是如何定義的? – Sapience 2011-05-03 18:51:11

+1

PWD是一個「賣變量」;不知何故「內建」。它也不是實時評估,它是由cd命令設置的(按照bash的手冊頁說的)。恕我直言,建議使用bash功能的解決方法相當不錯(+1) – hmontoliu 2011-05-03 21:34:41

+0

@hmontoliu謝謝。我想你對cd命令的解釋解決了這個謎,然後我猜想John的答案是我的解決方案。 – Sapience 2011-05-03 22:22:50

0

另一種選擇:在需要時在一個變量存儲命令,並評估它:

countPwd='ls | wc -l' 
echo $(eval "$countPwd") 
+0

-1 [真的很糟糕的想法](http://mywiki.wooledge.org/BashFAQ/048)。我知道你不能用數字出錯,但如果有人改變'countPwd'的值,你就是SOL。 – l0b0 2011-05-04 11:22:24

+1

@ l0b0您可以使countPwd只讀,以緩解這種擔憂。 – 2011-05-04 12:21:13

0

你需要寫一些C代碼:寫一個bash的loadable buitins來完成繁重的工作n定義具有動態值的變量,如$SECONDS$RANDOM$PWD僅由cd設置)。

在我的答案更詳細的信息here(這個問題的副本)。

+0

如果有一個很好的重複,那麼這個問題應該被重複關閉。但至少你花了時間來真正回答這個問題。 – GhostCat 2017-08-25 10:01:59