bashPS1
变量似乎可以访问所有shell变量。
$ foo=bar
$ PS1='$foo '
bar # Works as expected.
但是,在那里设置变量无效。
$ PS1='$(bar=baz)\$ '
$ echo $bar
$ # Does not work.
为什么,以及如何使这项工作?
该PS1
变量作为字符串求值。在bash字符串中,您可以执行以下操作:
$ myString="$foo"
和这个:
$ myString="Date: $(date)"
但这不是:
$ myString="$(foo=bar)"
该PS1
变量完全不受此规则约束。
注意:正如mkelement0在注释中解释的那样,这是因为该foo=bar
部分将在子shell中执行,所以您可以这样做$(foo=bar;echo $foo)
-只是变量仅存在于该作用域中。
还有另一个变量,称为PROMPT_COMMAND
。eval()
在评估PS1
变量之前,将在每个提示字符串中添加此处的代码。
因此,即使只按原样在此处编写作业也可以:
$ PROMPT_COMMAND='bar=baz'
$ echo $bar
baz # Works!
不过,请记住要检查您是否没有覆盖PROMPT_COMMAND
可能要保留的内容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句