由于转义字符,我无法对此进行扩展。
UNF\1122
现在我试图坚持使用一个非常简单的例子:
ps -ef | grep $USER
最终,在处理转义字符后,我想这样做。
ipcs -m | grep $USER | awk '{printf "%s ",$2}'
我知道$USER
它有价值,因为我这样做了。
$ echo $USER UNF\1122
请不要问我为什么管理员决定\
在用户名中添加 a,因为我不知道。
为了解决这个问题,我尝试了单引号和双引号。我也尝试过像这样更改用户名。
USER="UNF\\\\1122" and USER='UNF\\1122'
答案1
很棘手,因为根据实用程序 a\1
可能具有含义,例如 中的反向引用grep
,但 中则不然getent
。壳插值也使事情变得复杂。
# getent sees a\\b, cannot find this literal string
$ getent passwd 'a\\b'
# let the shell interpolate \\ to \ so getent sees a\b
$ getent passwd a\\b
a\b:x:9999:9999:Slash Gordon:/:/bin/sh
# or no iterpolation, literal a\b passed to getent
$ getent passwd 'a\b'
a\b:x:9999:9999:Slash Gordon:/:/bin/sh
# oops, shell interpolated \\ to \ and thus grep sees \b metacharacter
$ grep "a\\b" /etc/passwd
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
a\b:x:9999:9999:Slash Gordon:/:/bin/sh
# oops, also shell interpolation, so grep sees a\b metachar
$ grep a\\b /etc/passwd
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
a\b:x:9999:9999:Slash Gordon:/:/bin/sh
# no interpolation, pass \\ to grep, which then treats as literal \
$ grep 'a\\b' /etc/passwd
a\b:x:9999:9999:Slash Gordon:/:/bin/sh
$