我正在尝试两者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
有没有一种格式化方法$v
可以使两者都printf
工作export
?
答案1
这会失败,因为将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"
或者
PS1='\u\$'
printf 'PS1 was set to "%s"\n' "$PS1" # or just: printf '%s\n' "$PS1"
这将输出
PS1 will be set to "\u\$"
和
PS1 was set to "\u\$"
请参阅printf(1)
和/或printf(3)
在您的系统上 (man 1 printf
和man 3 printf
)。
另请注意,PS1
不需要导出。