动态Bash变量。他们何时获得价值?

时间:2014-04-15 02:20:33

标签: bash shell variables

我们说我有......

LOG="$(tail -n 1 /var/logs/sass/logs/style.log)" 
echo -e "$LOG".

变量集何时设置:分配时,或回显

4 个答案:

答案 0 :(得分:3)

命令替换($(tail ...))在被bash解析时执行;甚至在执行变量赋值之前。 (因此,在命令替换中使用变量的旧值是合法的。)

答案 1 :(得分:1)

设置变量时。假设你有像

这样的代码
LOG="$(tail -n 1 /var/logs/sass/logs/style.log)"
echo foo > /var/logs/sass/logs/style.log 
echo -e "$LOG".

然后LOG将包含日志文件的最后一行,而不是“foo”。

答案 2 :(得分:1)

提问者似乎相信他/她正在定义$LOG以匹配tail -n 1 /var/logs/sass/logs/style.log动态值 情况并非如此 - LOG是一个完全正常的变量,在执行赋值时设置一次到该日志文件的最后一行。

如果你真的要定义想要动态的东西,只有在需要时才评估它的值,你可以使用函数代替:

LOG()
{
  tail -n 1 /var/logs/sass/logs/style.log
}

然后只需要随时调用它(作为LOG)。

答案 3 :(得分:0)

自己很容易测试:

echo foo >file
filecontents=$(< file)
echo bar >file
echo "$filecontents"

输出为foo,表示在$(...)分配时执行filecontents