动态Bash变量。他们什么时候获得价值?
假设我有动态Bash变量。他们什么时候获得价值?,bash,shell,variables,Bash,Shell,Variables,假设我有 LOG="$(tail -n 1 /var/logs/sass/logs/style.log)" echo -e "$LOG". 何时设置变量:赋值时还是回显时?命令替换($(tail…)在bash解析时执行;甚至在执行变量赋值之前。(因此,在命令替换中使用变量的旧值是合法的。)命令替换($(tail…)在bash解析时执行;甚至在执行变量赋值之前。(因此,在命令替换中使用变量的旧值是合法的。)设置变量时。假设您有类似的代码 LOG="$(tail -n 1 /var/logs/s
LOG="$(tail -n 1 /var/logs/sass/logs/style.log)"
echo -e "$LOG".
何时设置变量:赋值时还是回显时?命令替换(
$(tail…
)在bash解析时执行;甚至在执行变量赋值之前。(因此,在命令替换中使用变量的旧值是合法的。)命令替换($(tail…
)在bash解析时执行;甚至在执行变量赋值之前。(因此,在命令替换中使用变量的旧值是合法的。)设置变量时。假设您有类似的代码
LOG="$(tail -n 1 /var/logs/sass/logs/style.log)"
echo foo > /var/logs/sass/logs/style.log
echo -e "$LOG".
然后
LOG
将包含日志文件的最后一行,而不是“foo”。当设置变量时。假设您有类似的代码
LOG="$(tail -n 1 /var/logs/sass/logs/style.log)"
echo foo > /var/logs/sass/logs/style.log
echo -e "$LOG".
然后
LOG
将包含日志文件的最后一行,而不是“foo”。很容易测试您自己:
echo foo >file
filecontents=$(< file)
echo bar >file
echo "$filecontents"
echo foo>文件
filecontents=$(文件
回显“$filecontents”
输出为
foo
,这意味着$(…)
是在分配文件内容时执行的。很容易测试自己:
echo foo >file
filecontents=$(< file)
echo bar >file
echo "$filecontents"
echo foo>文件
filecontents=$(文件
回显“$filecontents”
输出是foo
,这意味着$(…)
在分配文件内容时执行。提问者似乎认为他/她正在定义$LOG
以匹配tail-n 1/var/logs/sass/logs/style.LOG的动态值
事实并非如此——LOG是一个完全正常的变量,在执行赋值时设置一次,直到日志文件的最后一行
如果您确实想要定义某个动态对象,且仅在需要时才计算其值,则可以使用函数:
LOG()
{
tail -n 1 /var/logs/sass/logs/style.log
}
然后只要你想叫它(如LOG
)。提问者似乎认为他/她正在定义$LOG
,以匹配tail-n1/var/logs/sass/logs/style.LOG的动态值
事实并非如此——LOG是一个完全正常的变量,在执行赋值时设置一次,直到日志文件的最后一行
如果您确实想要定义某个动态对象,且仅在需要时才计算其值,则可以使用函数:
LOG()
{
tail -n 1 /var/logs/sass/logs/style.log
}
然后,只要在需要时调用它(如LOG
)