bash - 在 msys bash 上包含换行符时 PS1 命令替换失败

标签 bash backticks ps1 command-substitution

这条命令成功

$ PS1='$(date +%s) $ '
1391380852 $

但是,如果我添加换行符,它会失败

$ PS1='$(date +%s)\n$ '
bash: command substitution: line 1: syntax error near unexpected token `)'
bash: command substitution: line 1: `date +%s)'

如果我使用反引号就可以了

$ PS1='`date +%s`\n$ '
1391381008
$

但是backticks are discouraged .那么是什么导致了这个错误呢?

GNU bash, version 4.2.45(6)-release

最佳答案

您可以轻松消除解析歧义,以防止遇到任何此类错误(尽管我自己无法重现):

PS1='$(date +%s)'$'\n$ '

$'\n' 语法解析为文字换行符,而 '\n' 解析为包含两个字符的字符串 \n 转义序列。

有关 $''''(扩展反斜杠转义序列)的区别的更多信息,请参阅 Bash Hackers Wiki .

关于bash - 在 msys bash 上包含换行符时 PS1 命令替换失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21517281/

相关文章:

linux - bash 函数与别名冲突

java - 将 kotlin 程序编译为采用 args[0] 并将其打印在控制台中的 java jar 后,如何在 bash 中转义 * 乘法符号?

ruby - Net::SSH::Shell::Process $DONTEVERUSETHIS

Bash 在使用反引号时提示 here-document 中的语法错误

git - Bash - 用于分支管理的 GIT 小片段

linux - 给程序相同的输入文件 100 次

python - 是否可以在 shell 命令中的反引号之间执行 Python 程序?

android - 为什么 Kotlin 数据类对象有反引号?

带有提示的 Linux 命令行问题

Bash PS1 窗口标题?