n 배의 입력 문자열 인 문자열을 출력 할 수있는 내장 Linux 명령이 있습니까?
n 배의 입력 문자열 인 문자열을 출력 할 수있는 내장 Linux 명령이 있습니까?
답변:
adrian@Fourier:~$ printf 'HelloWorld\n%.0s' {1..5}
HelloWorld
HelloWorld
HelloWorld
HelloWorld
HelloWorld
adrian@Fourier:~$
printf
이 반복적으로 무료로 형식 문자열, "루프"를 초과 인수를 적용 할 것입니다. "초과"라는 말은 %
자리 표시 자 보다 더 많은 논증이 있음을 의미합니다 .
휴대가 편리한 구식 방법은 다음과 같습니다.
yes "HelloWorld" | head -n 10
이것은 중괄호 확장을 사용 하는 Adrian Petrescu의 답변 의 보다 일반적인 버전입니다 .
for i in {1..5}
do
echo "HelloWorld"
done
이는 다음과 같습니다.
for i in 1 2 3 4 5
이것은 파이크의 대답에 대해 좀 더 간결하고 역동적 인 버전입니다 .
printf -v spaces '%*s' 10 ''; printf '%s\n' ${spaces// /ten}
sed -n 'H;${x;s/\n//gp}'
하거나 sed -n ':t;${s/\n//gp};N;bt'
다른 방법으로 연결하여 echo $(yes "HelloWorld" | head -n 10)
각 문자열 복사본 사이에 공백을 추가하는 것입니다. 또 다른 방법은 tr -d '\n'
최종 줄 바꿈을 제거하는 파이프 입니다.
yes
내가 (출력이 변동) 명령을 복제하고 싶어하기 때문에 솔루션은 내가 필요 정확히이었다. 따라서 :yes "$(my-command)" | head -n 2
이것은 매개 변수화 될 수 있으며 임시 변수 FWIW가 필요하지 않습니다.
printf "%${N}s" | sed 's/ /blah/g'
또는 $N
bash 배열의 크기 인 경우 :
echo ${ARR[@]/*/blah}
printf
형식 지정자 로 혼합해서는 안됩니다 . 데이터에 형식 문자열이 포함되어 있으면 어떻게됩니까? 이것은 "정밀도"(길이)를 동적으로 지정하는 올바른 방법입니다 printf '%*s' "$N"
.-변수 확장을 막기 위해 형식 문자열을 작은 따옴표로 묶는 습관을들이십시오.
이미 몇 가지 좋은 방법이 언급되었습니다. seq
그래도 좋은 것을 잊을 수는 없습니다 .
`seq 5`에서 i의 경우 [john @ awesome] $; 에코 "안녕하세요"; 완료 안녕하세요 안녕하세요 안녕하세요 안녕하세요 안녕하세요
{i..j}
트릭은 절대 빈 범위를 반환하지 않습니다.)
아마도 더 일반적이고 유용한 다른 방법 일 것입니다.
adrian@Fourier:~$ n=5
adrian@Fourier:~$ for (( c=1; c<=n; c++)) ; do echo "HelloWorld" ; done
HelloWorld
HelloWorld
HelloWorld
HelloWorld
HelloWorld
adrian@Fourier:~$
bash 쉘은 대부분의 사람들이 생각하는 것보다 강력합니다. :)
yes
, printf
, for i in {1..5}
)가이 경우에 것을 n
제로, 그것은 빈 문자열을 반환으로 인해 비교 수학적 표기법도 1의 상태를 존재하지 않고,은 1로 상쇄하기 쉽다 (변화에 의해 예 <=
를을 <
)
트릭을 사용할 수 있습니다. 빈 변수를 반향해도 아무 것도 인쇄되지 않습니다. 그래서 당신은 쓸 수 있습니다 :
echo word$wojek{1..100}
경우 $wojek1 $wojek2
... $wojek100
존재하지 않는 변수는 당신은 당신의 말은 아무것도없이 100 번 반복 얻을 것이다.
$_
대신에 $wojek
사용하면 의도가 더 명확 해집니다.
반복 n
시간, 그냥 넣어 n-1
쉼표를 사이 {}
:
$ echo 'helloworld'{,,}
helloworld helloworld helloworld
첫 번째 반향 후에 'helloworld'를 두 번 반복합니다.
n
변수에서 가져 오려면 어떻게해야 합니까?
BSD를 사용하는 경우을 사용할 수 있습니다 seq
.
$ seq -f "Hello, world" 5
Hello, world
Hello, world
Hello, world
Hello, world
Hello, world
seq (GNU coreutils) 8.25
,이 준다 seq: format 'Hello, world' has no % directive
, 서식 지시자를 강제로 존재합니다. GNU coreutils는 많은 리눅스 배포판과 Cygwin에서 사용됩니다. BSD seq에서만 작동하는 정보가 누락 된 사람들을 위해 여기에 정보를 포함하십시오.
line="==========================="
line=${line:0:10}
${line//"="/"ten "}
출력
ten ten ten ten ten ten ten ten ten ten
x
반복 사이에 줄 바꿈을 자동으로 얻지 않는 Perl의 연산자 와 같은 것을 원한다고 가정하십시오 .
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
bash에서 for
쓸 수 없기 때문에 명시 적으로 루프를 사용했습니다 {1..$n}
. 가변 확장은 변수 대체 전에 수행됩니다.
리눅스에 정확히 내장되어 있지는 않지만 파이썬이 설치되어 있다면 ..
python
>>>var = "string"
>>>var*n
또는 논평자가 제안한 바와 같이 한 줄로 :
python -c 'print "This is a test.\n" * 10'