小编lui*_*gal的帖子

有没有办法在不使用反引号的情况下在命令行提示符 (PS1) 中执行代码?

我直接在命令提示符 (PS1) 中使用这段代码,它告诉我前一个命令是否正确执行。

PS1="\`if [ \$? = 0 ]; then echo -e \"\e[1;32m[?? ]\"\e[0m; else echo -e \"\e[1;31m[ ]\"\e[0m; fi\`-[\u@\h: \w]"
Run Code Online (Sandbox Code Playgroud)

我不喜欢反引号。有没有办法在不使用``的情况下执行它?

另外,这是否会干扰另一个脚本的结果?我已经公开了一个在命令提示符下调用的函数,但是这一段弄乱了结果。该函数仅在导出 PS1 时调用一次,而不是每次加载命令提示符时调用。

更新 1:所以我尝试了普通的“$()”,但没有用。而且,现在我更困惑了,因为如果给它添加一个反斜杠的话——“\$()”。为什么是这样?有人知道吗?“$”需要转义吗?

原作:

export PS1="[\`if [ \$? = 0 ]; then echo -e \"\e[1;32m[?? ]\"\e[0m; else echo -e \"\e[1;31m[ ]\"\e[0m; fi\`]-[\u@\h: \w] \$ "
Run Code Online (Sandbox Code Playgroud)

结果:

[?? ]-[rordev@Luiss-MBP: ~/Development/test] $
Run Code Online (Sandbox Code Playgroud)

这不起作用:

export PS1="[$(if [ $? = 0 ]; then echo -e \e[1;32m[?? ]\e[0m; else echo -e \e[1;31m[ ]\e[0m; fi)]-[\u@\h: \w] \$ "
Run Code Online (Sandbox Code Playgroud)

结果:

-bash: 32m[??: command …
Run Code Online (Sandbox Code Playgroud)

shell bash prompt quoting command-substitution

5
推荐指数
2
解决办法
2528
查看次数

标签 统计

bash ×1

command-substitution ×1

prompt ×1

quoting ×1

shell ×1