支柱の拡張に不要なスペース

支柱の拡張に不要なスペース

次の中かっこ拡張 (bash シェル) があります。

echo -e {0..4..2}" "{0..2..2}"\n"

私はこれが生産されると予想しました

0 0
0 2
2 0
2 2
4 0
4 2

しかし、最初の行を除く出力のすべての行には先行スペースがあり、最後に余分な空行があり、これは予期しませんでした。なぜこれですか?簡単に修正する方法はありますか?明らかにパイプで接続するなど、細かい操作を実行できますが、sed 's/^ //'追加のコマンドでパイプする必要がないより素晴らしい方法はありますか?

答え1

echo改行を含めたり作成したりしても、スペースで区切られた引数を印刷します。また、出力の末尾に改行文字を追加します(そうでない場合echo -n)。

使用printf:

printf '%s\n' {0..4..2}" "{0..2..2}

予期しないことが起こったら、echoいつも考えるprintf。慣れたら、printf最初の選択になることもできます。

答え2

空白が発生する理由は、各行の先頭が複雑なためです。このechoコマンドは、スペースで区切られた引数を出力します。各パラメータは拡張と改行文字で{0..4..2}構成されています。{0..2..2}これらの2つを組み合わせると、各行の先頭にある空白が実際にechoアイテム間で放出される空白であることがわかります。

私はいくつかの解決策を考えました。 1つ目は、出力の先頭に空白行があっても問題ない場合は、各拡張の先頭に改行文字を入れることができるということです。

echo -e "\n"{0..4..2}" "{0..2..2}

別の方法は、パラメータを繰り返して個別に印刷することです。

for seq in {0..4..2}" "{0..2..2}; do echo "$seq"; done

または

echo -e {0..4..2}"\n"{0..2..2} | xargs printf "%d %d\n"

関連情報