コマンドの一部としてサブシェルコマンドを実行するたびに、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
ので、o
of のみtwo
が表示されます。
two
目的の結果を得るためにクリーンアップする必要があります。
たとえば、
echo "one $(tr -d '\r' < two) three"
答え2
ここではすべてがうまくいきます。
$ echo -n two > two
$ echo "one $(cat two) three"
one two three
の出力は何ですかls -l two
?