2017-02-28 32 views
0

イム(シェルスクリプトjq - シェルスクリプトで '*'(特殊文字)をエスケープする方法は?

echo $(jq -n '"1\n2\n3" | gsub("\n"; @t " * ")') 

で次のコマンドを使用して、期待出力が

"1 * 2 * 3" 

である。しかし、シェルスクリプトで、それはそれぞれのディレクトリ内のすべてのファイル名に「\ n」を置き換えるすなわち'*'はこのコンテキストでは特別なパラメータとして扱われます)。

1 file1 file2 2 file1 file2 3 

ターミナルで同じものを実行すると、期待される出力が得られます。

誰もがこれで私を助けることができますか?

+1

あなたが代入を引用しようとしたことがありますか? –

+0

@ IgnacioVazquez-Abramsオハイオ州私のゴシック私はそれを逃した。それが働いたことを追加した後。ありがとう –

+1

なぜ 'echo'を使っているのですか? 'jq'を実行するだけです –

答えて

1

結果(1 * 2 * 3)がパス名展開を行わないようにコマンド置換を引用する必要があります。

echo "$(jq -n '"1\n2\n3" | gsub("\n"; @t " * ")')" 

あなたがそれを行うのみ事がechoへの唯一の引数として渡している場合、コマンドの出力をキャプチャする理由がないこと、しかし、覚えておいてください。コマンドを単独で実行させてください。

$ echo "$(jq -n '"1\n2\n3" | gsub("\n"; @t " * ")')" 
"1 * 2 * 3" 
$ jq -n '"1\n2\n3" | gsub("\n"; @t " * ")' 
"1 * 2 * 3" 

(あなたは出力をキャプチャしていない場合はボーナスとして、jqはおそらく色の出力を生成します。)

関連する問題