エスケープ文字を含む拡張子

エスケープ文字を含む拡張子

エスケープ文字のため拡張できません。

UNF\1122

今は非常に簡単な例を見てみましょう。

ps -ef | grep $USER

最終的にエスケープ文字を処理した後にこれを実行したいと思います。

ipcs -m | grep $USER | awk '{printf "%s ",$2}'

$USER私はそれをするのでそれが価値があることを知っています。

$ echo $USER UNF\1122

なぜ管理者がユーザー名にを追加することにしたのか尋ねないでください\。なぜなら私は知らないからです。

この問題を解決するために、一重引用符と二重引用符を使用してみました。私もこのようにユーザー名を変更しました。

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
$ 

おすすめ記事