入力文字列のn倍の文字列を出力するための組み込みのLinuxコマンドはありますか。
adrian@Fourier:~$ printf 'HelloWorld\n%.0s' {1..5}
HelloWorld
HelloWorld
HelloWorld
HelloWorld
HelloWorld
adrian@Fourier:~$
これはかなり移植性のある昔ながらの方法です。
yes "HelloWorld" | head -n 10
これはブレース展開を使ったAdrian Petrescuの答えのより慣習的なバージョンです:
for i in {1..5}
do
echo "HelloWorld"
done
これは以下と同等です。
for i in 1 2 3 4 5
これはpikeの答えのもう少し簡潔で動的なバージョンです。
printf -v spaces '%*s' 10 ''; printf '%s\n' ${spaces// /ten}
既にいくつかの良い方法があります。古き良きseq
を忘れることはできません。
[john @ awesome] `seq 5`の中の$ i。こんにちは[こんにちは]をエコーしますか;こんにちは[こんにちは]こんにちは[こんにちは]こんにちは[こんにちは]こんにちは[こんにちは]こんにちは
これはパラメータ化することができ、一時変数FWIWを必要としません。
printf "%${N}s" | sed 's/ /blah/g'
$N
がbash配列のサイズの場合
echo ${ARR[@]/*/blah}
あなたはトリックを使うことができます。空の変数をエコーしても何も表示されません。だからあなたは書くことができます:
echo Word$wojek{1..100}
$wojek1 $wojek2
... $wojek100
が存在しない変数であれば、Wordは何もせずに100回繰り返されます。
より一般的であなたにとって有用な別の方法かもしれません。
adrian@Fourier:~$ n=5
adrian@Fourier:~$ for (( c=1; c<=n; c++)) ; do echo "HelloWorld" ; done
HelloWorld
HelloWorld
HelloWorld
HelloWorld
HelloWorld
adrian@Fourier:~$
Bashシェルは、ほとんどの人が考えるよりも強力です:)
n
回繰り返し、n-1
の間に{}
コンマを入れるだけです。
$ echo 'helloworld'{,,}
helloworld helloworld helloworld
最初のエコーの後に「helloworld」を2回繰り返します。
awk 'BEGIN {while (c++<4) printf "Hello"}'
結果
ハローハローハローハロー
@pikeが何を示唆していたかに基づいて
文字列echoのすべての文字に対して
echo ${target//?/$replace}
=
文字で下線が引かれている見出しの例
export heading='ABCDEF';
export replace='=';
echo -e "${heading}\n${heading//?/$replace}"
出力します
ABCDEF
======
これはLinuxとOS Xの間の移植のようです。
nジョイ!
私はyes
ソリューションで壊れたパイプの警告を経験したので、別の良い方法があります:
$ seq 4 | sed "c foo"
foo
foo
foo
foo
BSDを使っているのなら、seq
を使うことができます。
$ seq -f "Hello, world" 5
Hello, world
Hello, world
Hello, world
Hello, world
Hello, world
正確にはLinuxに組み込まれていませんが、Pythonがインストールされている場合は..
python
>>>var = "string"
>>>var*n
コメンターが示唆するように、あるいは一行で:
python -c 'print "This is a test.\n" * 10'
Perlのx
演算子のように、繰り返しの間に自動的に改行が入らないようなものが欲しいとします。
x() {
# usage: x string num
for i in $(seq 1 $2); do printf "%s" "$1"; done
# print a newline only if the string does not end in a newline
[[ "$1" == "${1%$'\n'}" ]] && echo ""
}
x Hi 10 # ==> HiHiHiHiHiHiHiHiHiHi
x $'Hello World!\n' 3
{1..$n}
をbashで書くことはできないので、明示的にfor
ループを使用しました。ブレース展開は変数置換の前に行われます。
line="==========================="
line=${line:0:10}
${line//"="/"ten "}
アウトプット
ten ten ten ten ten ten ten ten ten ten
ここに魔法はない:
seq 5 | awk '{print "Hello World"}'
これを試してください。
echo $(for i in $(seq 1 100); do printf "-"; done)
(百ダッシュ)を作成します。