子プロセスを含むエコーは予期しない出力を生成します。

子プロセスを含むエコーは予期しない出力を生成します。

コマンドの一部としてサブシェルコマンドを実行するたびに、echo出力で異常な結果が生成されることがわかりました。これがUnixシェルの仕組みについての私の理解不足であると確信していますが、後で何が起こっているのか、そしてこのユースケースを処理する適切な方法は何であるかを説明していただきありがとうございます。

$ cat two
two

$ echo "one $(cat two) three"
threeo

出力one two threeで期待しています

修正する

ファイルがtwo以前に使用されたため、上記の誤った例についてお詫び申し上げますcurl -I。文脈の一貫性を維持するために、以下がより適切な例である。

$ curl -sI https://google.com | grep server | cut -d " " -f 2
gws

$ echo "one $(curl -sI https://google.com | grep server | cut -d " " -f 2) three"
threes

上記のように、予想される結果は次のとおりです。one gws three

ベストアンサー1

ファイルtwoにキャリッジリターン文字が含まれている可能性があります。

one two表示される出力が重なっているように見える threeので、oof のみtwoが表示されます。

two目的の結果を得るためにクリーンアップする必要があります。

たとえば、

echo "one $(tr -d '\r' < two) three"

おすすめ記事