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

14 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
$

但是反叛是沮丧的.那是什么导致了这个错误?

GNU bash, version 4.2.45(6)-release

Cha*_*ffy 19

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

PS1='$(date +%s)'$'\n$ '
Run Code Online (Sandbox Code Playgroud)

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

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

  • 奇迹般有效.问题出现在我的情况下使用MSYS2编译的bash`(GNU bash,版本4.2.45(6)-release(x86_64-pc-msys)`).谢谢. (2认同)
  • 好的,我解决了双引号 `"bla \n bla"` 变成了 `"bla "$'\n'" bla"`。通过良好的旧试验和错误解决,并阅读有关 Bash 转义的信息...... (2认同)