Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
401 views
in Technique[技术] by (71.8m points)

backticks - PS1 command substitution fails when containing newlines on msys bash

This command succeeds

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

However if I add a newline it fails

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

If I use backticks it works

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

but backticks are discouraged. So what is causing this error?

GNU bash, version 4.2.45(6)-release
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You can disambiguate the parsing easily, to prevent hitting any such bug (though I can't reproduce it myself):

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

This $' ' syntax parses to a literal newline character, whereas ' ' parses to a string containing a two-character escape sequence.

For more info on how $'' differs from '' (expanding backslash-escaped sequences) refer to the Bash Hackers Wiki.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...