2011-05-03 23 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