複数の空行を繰り返さずに印刷します\n

複数の空行を繰り返さずに印刷します\n

echoLinux で新しい行を生成するために使用されます。

echo -e '\n'2行

echo -e '\n\n'3行など。

例えば

user@linux:~$ echo

user@linux:~$ echo -e '\n'


user@linux:~$ echo -e '\n\n'



user@linux:~$ 

と入力する代わりに\n\n、 のようなものを使用することもできますか\n * 3

望ましい出力

3 行は生成されないことはわかっていますecho -e '\n * 3'が、私の言っている意味は伝わると思います。

user@linux:~$ echo -e '\n * 3' # <== I hope you get what I mean



user@linux:~$ 

答え1

bash、ksh93、zshを使用している場合は

printf '%.0s\n' {1..3}

3 つの改行を生成します。{1..3}は に展開され1 2 3、その後 はprintfこれらを改行が続くゼロ幅の文字列として出力します。

答え2

POSIX ソリューションが必要な場合は、以下を使用します。

ループ

明らかな(そして見苦しい)POSIX ループの他に、

i=0; while [ "$((i+=1))" -le 7 ]; do echo; done

POSIX (ポータブル)

他にも(より短い、必ずしも速いわけではない)解決策があります。

(1)スペースを出力し、改行に変換します。

printf '%*s' 30 | tr ' ' '\n'

(2)あるいは、23行を取得するには

seq 23 | tr -dc '\n'

(3)awkを使う:

seq 23 | awk '{printf "\n"}'

(4)IFSがデフォルトであると仮定

printf '%.0s\n' $(seq 23)

(5)sed改行を1つ追加します。改行が23行の場合は22を使用します。

printf '%0*d' 22 | sed 'y/0/\n/'

(6)シェルによっては、番号の小さい配列要素をすべて自動的に作成するものもあります。

zsh -c 'a[33]=1; printf "%.0s\n" "${a[@]}"'

(7)NULバイトを取得する

head -c 5 /dev/zero | tr '\0' '\n'

広く知られている

これらは、より広く知られている(そして使用されている)ソリューションの他に、次のものがあります。

(8)headカウントを使用する:

yes '' | head -n 23

(9)ないPOSIX。一部のシェル(少なくともksh、bash、zsh)の場合:

printf '%.0s\n' {1..23}

他の言語

そしてもちろん、(POSIX)高水準言語:

(10)パール

perl -e 'print "\n" x 23'
perl -E 'say "\n" x 22'  

(11)PHP

php -r 'echo str_repeat( "\n" , 3 );'

(12) パイソン

python -c 'print("\n" * 3)'

答え3

$ yes "" | head -30

30 個の改行を取得します。

答え4

Python の使用がオプションである場合、次のコマンドは希望どおりに動作します。

python -c 'print("\n" * 3)'

関連情報