単一引用符で囲まれた文字列内にある二重引用符で囲まれた文字列内に単一引用符を埋め込もうとしています。問題は、単一引用符で囲まれた文字列内では、二重引用符が特別なものとして扱われないため、中央の単一引用符が単一引用符で囲まれた文字列の一部ではなく、末尾として扱われることです。これを行うには、単一引用符で囲まれた文字列を終了し ( 'egrep "&|\"|:|'
)、他の方法で単一の単一引用符をエスケープし (\'
または"'"
)、必要な残りの部分で新しい単一引用符で囲まれた文字列を開始する必要があります ( '" | wc -l'
)。最終結果:
splCharCheck='egrep "&|\"|:|'\''" | wc -l'
ただし、間違った問題を解決しようとしているように見える @sehe に同意する必要があります。このコマンドを直接実行するのではなく、変数に入れるのはなぜですか? これは一般的に悪い考えです(そしてeval
、事態がおかしくなる機会が増えるだけです)。そして、さらに遡って、あなたは本当に何をしようとしているのですか?
ps を使用する必要がある場合eval
は、少なくとも評価中の文字列を二重引用符で囲みます。これを怠ると、深刻な理解不能なエラーが発生する可能性があります。最後に、$( )
逆引用符の代わりに使用することをお勧めします。
count=$(echo "$Name" | eval "$splCharCheck")