如何从bash $ PS1设置变量

时间:2014-06-18 22:59:45

标签: bash variable-assignment ps1

bash PS1变量似乎可以访问所有shell的变量。

$ foo=bar
$ PS1='$foo '
bar # Works as expected.

但是,设置变量不起作用。

$ PS1='$(bar=baz)\$ '
$ echo $bar

$ # Does not work.

为什么如何使这项工作?

1 个答案:

答案 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中可能要保留的先前设定的内容。