1

特定の入力文字列でいくつかの特殊文字を見つける必要があります。文字列に次の特殊文字が含まれている場合は、検出する必要があります。文字を見つけるために egrep を実行しています。私のコードはすべての文字で機能しますが、一重引用符では機能しません。私のコードスニペットを見つけてください。

splCharCheck='egrep "&|\"|:|\'" | wc -l'

count=`echo  "$Name" | eval $splCharCheck`

ここで一重引用符をエスケープする方法を教えてくれる人はいますか?

4

3 に答える 3

0

単一引用符で囲まれた文字列内にある二重引用符で囲まれた文字列内に単一引用符を埋め込もうとしています。問題は、単一引用符で囲まれた文字列内では、二重引用符が特別なものとして扱われないため、中央の単一引用符が単一引用符で囲まれた文字列の一部ではなく、末尾として扱われることです。これを行うには、単一引用符で囲まれた文字列を終了し ( 'egrep "&|\"|:|')、他の方法で単一の単一引用符をエスケープし (\'または"'")、必要な残りの部分で新しい単一引用符で囲まれた文字列を開始する必要があります ( '" | wc -l')。最終結果:

splCharCheck='egrep "&|\"|:|'\''" | wc -l'

ただし、間違った問題を解決しようとしているように見える @sehe に同意する必要があります。このコマンドを直接実行するのではなく、変数に入れるのはなぜですか? これは一般的に悪い考えです(そしてeval、事態がおかしくなる機会が増えるだけです)。そして、さらに遡って、あなたは本当に何をしようとしているのですか?

ps を使用する必要がある場合evalは、少なくとも評価中の文字列を二重引用符で囲みます。これを怠ると、深刻な理解不能なエラーが発生する可能性があります。最後に、$( )逆引用符の代わりに使用することをお勧めします。

count=$(echo  "$Name" | eval "$splCharCheck")
于 2012-10-30T00:34:22.283 に答える
0

何を達成しようとしていますか?これは XY 問題のようなにおいがします。

bashでは、次を使用してテキストを簡単にエスケープできます

printf "%q\n" "$Name"

例えば:

$ Name="Some 'intricate' value"
$ printf "%q\n" "$Name"
Some\ \'intricate\'\ value
于 2012-10-29T17:41:19.503 に答える
0

一重引用符を「エスケープ」しないでください。以下を確認してください。

# cat test
'name with quotes'
no quotes

# cat test | egrep "'"
'name with quotes'

# cat test | egrep "\'"
'name with quotes'
no quotes
于 2012-10-29T16:54:46.040 に答える