Buo*_*uoy 1 bash prompt printf
我正在尝试同时使用printf和export用于设置的变量,PS1但我尝试过的所有内容都返回错误printf或将文字\u放入提示中。
v='\u\$'; printf "$v"; export PS1="$v"
-bash: printf: missing unicode digit for \u
v='\\u\$'; printf "$v"; export PS1="$v"
\u$
v=$'\u'; v+='\$'; printf "${v}"; export PS1="${v}"
-bash: printf: missing unicode digit for \u
Run Code Online (Sandbox Code Playgroud)
有没有一种方法来格式化$v,以使双方printf和export工作?
这失败了,因为printf将其第一个参数中的一些反斜杠字母解释为特殊的。
一般在使用时printf你提供
这意味着,第一个参数printf就可以始终是一个单引号字符。
在 shell 中,您可以%s将格式字符串中的几乎任何内容用作占位符,除非您想要左/右填充之类的东西(例如%20s,为右对齐的字符串或%-20s左对齐的字符串使用 20 个字符),浮点数中的一定数量的小数位(%.3f三个小数位),或整数的零填充(%08d八位数字,零填充)等。
例如,要打印您的字符串,请%s在格式化字符串中使用:
v='\u\$'
printf 'PS1 will be set to "%s"\n' "$v" # or just: printf '%s\n' "$v"
PS1="$v"
Run Code Online (Sandbox Code Playgroud)
或者
PS1='\u\$'
printf 'PS1 was set to "%s"\n' "$PS1" # or just: printf '%s\n' "$PS1"
Run Code Online (Sandbox Code Playgroud)
这将输出
PS1 will be set to "\u\$"
Run Code Online (Sandbox Code Playgroud)
和
PS1 was set to "\u\$"
Run Code Online (Sandbox Code Playgroud)
查看printf(1)和/或printf(3)在您的系统上(man 1 printf和man 3 printf)。
还要注意,PS1不需要导出。