bash PS1
变量似乎可以访问所有shell的变量。
$ foo=bar
$ PS1='$foo '
bar # Works as expected.
但是,设置变量不起作用。
$ PS1='$(bar=baz)\$ '
$ echo $bar
$ # Does not work.
为什么,如何使这项工作?
答案 0 :(得分:1)
PS1
变量被评估为字符串。在bash字符串中,您可以这样做:
$ myString="$foo"
而且:
$ myString="Date: $(date)"
但不是这样:
$ myString="$(foo=bar)"
PS1
变量根本不能免除此规则。
注意:,mkelement0在评论中说明,这是因为foo=bar
部分将在子shell中执行,因此您可以执行$(foo=bar;echo $foo)
,虽然 - 它只是变量只存在于该范围内。
还有一个名为PROMPT_COMMAND
的变量。在评估eval()
变量之前,此处的代码将在每个提示字符串处PS1
&#39}。
因此,即使只是按原样写下你的作业也会有效:
$ PROMPT_COMMAND='bar=baz'
$ echo $bar
baz # Works!
请记住检查您是否未覆盖PROMPT_COMMAND
中可能要保留的先前设定的内容。