변수를 표준 입력으로 바꾸시겠습니까?

변수를 표준 입력으로 바꾸시겠습니까?

특정 값을 반복하고 싶은데 간단히 for 루프를 사용할 수 있다는 것은 알지만 마지막에 명령에서 변수 값을 바꿀 수 있는 다른 방법이 있나요?

약간

echo 11"$p" < 8 #toprint 118

echo 11"$p" < 9 #toprint 119

echo 11"$p" < a #toprint 11a

명령이 끝날 때 특정 변수를 내 값으로 바꿀 수 있기를 원합니다. 이 작업을 수행하는 방법에는 여러 가지가 있다는 것을 알고 있으므로 다른 방법을 요구하지 않습니다.

답변1

( read p && echo "11$p" ) <<<8

또는

{ read p && echo "11$p"; } <<<8

변수가 명령 이후의 값을 유지하는 경우.

이것은<<<이 문자열은 리디렉션됩니다.. 단일 문자열을 명령이나 유틸리티로 리디렉션합니다. 여기서는 서브쉘이나 복합 명령에 숫자를 보내는 데 사용합니다. 이 복합 명령은 값을 읽은 다음 이를 문자열의 일부로 인쇄합니다.

<8다음에서 시작하려고 시도하므로 사용할 수 없습니다.문서부르다 8.

답변2

값이 배열에 있으면 반복할 필요 없이 다음을 수행하면 됩니다.

values=(8 9 a)
printf '11%s\n' "${values[@]}"

다른 변수에 있는 경우에도 동일합니다.

a=8 b=9 c=a
printf '11%s\n' "$a" "$b" "$c"

입력이 표준 입력에서 오는 경우 다음을 사용할 수 있습니다 xargs.

xargs printf '11%s\n' << EOF
8 "9"
'a'
EOF

(지원되는 참조 또는 매개변수 구분 기호의 다양한 유형이 위에 나와 있습니다 xargs.)

또는 다음과 같은 것을 사용하십시오:

sed 's/^/11/' << EOF
8
9
a
EOF

또는

awk '{print "11" $0}' << EOF
8
9
a
EOF

일반적으로 말하면,쉘 스크립트에서는 명시적으로 작성하고 싶지 않습니다.주기. 이것주기이는 한 번에 한 줄씩 처리하거나 한 번에 하나의 인수를 처리하는 텍스트 유틸리티에 의해 수행됩니다.

관련 정보