ファイルがありますtest.xml
(下記参照)。このgrepの仕組みは次のとおりです。
grep '<appointment-id internal:ref=1.2.3/>' test.xml
出力は次のとおりです
<appointment-id internal:ref=1.2.3/>
しかし、これは失敗します。
grep "$(grep '<appointment-id internal:ref=1.2.3/>' test.xml)" test.xml
出力は次のとおりです
grep: invalid character range
コンテンツtest.xml
:
<note>
<to>Jim</to>
<from>John</from>
<heading>Reminder</heading>
<body>Some text</body>
<appointment-id internal:ref=1.2.3/>
</note>
grep
これら2つのコマンド(単純なコマンドとネストしたコマンド)を使用してスクリプトに入れましたset -x
。以下は、スクリプトを正確にコピーして貼り付けたものです。
set -x
grep '<appointment-id internal:ref=1.2.3/>' test.xml
grep "$(grep '<appointment-id internal:ref=1.2.3/>' test.xml)" test.xml
exit 0
出力は次のとおりです。
++ grep '<appointment-id internal:ref=1.2.3/>' test.xml
<appointment-id internal:ref=1.2.3/>
+++ grep '<appointment-id internal:ref=1.2.3/>' test.xml
++ grep ' <appointment-id internal:ref=1.2.3/>' test.xml
grep: invalid character range
++ exit 0
答え1
grep
出力が端末でなくても(内部的に)カラー出力を生成します。環境変数がに設定されている場合は、GREP_COLOR
これを行うことができますalways
。
シェーディング制御コードには、外部から入力したときにgrep
文字範囲として解釈される文字が含まれています。
このパターンは、文字範囲として解釈されても効果はありません。
grep
--color=never
回避策は、適切な環境変数()を明示的に使用または設定して出力の色付けを無効にすることですGREP_COLOR=never
。
これを設定すると、例ではexternalのように端末に書き込むときにカラー出力のみを生成する必要がありますが、innerの場合はGREP_COLOR=auto
そうでgrep
はありません。grep
grep