我们说我有......
LOG="$(tail -n 1 /var/logs/sass/logs/style.log)"
echo -e "$LOG".
变量集何时设置:分配时,或回显?
答案 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
。