echo "my name is=`read` and am from `read`"
예상 출력:
my name is=sudhir and am from india
값 sudhir
과 india
입력이 사용됩니다.
이를 수행하는 방법은 480개의 질문에 적용하는 것을 좋아합니다. 각 질문에 필요한 사용자 입력의 양을 모릅니다. 도와주세요.
답변1
read
기본적으로 입력에서 단어를 읽습니다.변수로 변환.
`cmd`
, 고대 형태 $(...)
캡처산출명령. 기본적으로 read
출력은 생성되지 않습니다. 읽을 내용을 입력할 때 표시되는 텍스트 read
는 다음과 같습니다.에코read
단말 장치의 경우 1로 출력 되지 않습니다 .
일부 read
구현에서는 읽은 내용을 출력할 수 있습니다. 예를 들어, zsh
내장 read
함수는 -e
or를 사용하여 이 작업을 수행 할 수 있습니다 -E
(후자는 입력을 에코하는 것 외에도 변수에 입력도 저장합니다).
그래서 zsh
:
echo "my name is=$(read -e) and am from $(read -e)"
이식 가능하게는 입력 줄을 읽을 수 있습니다(대신특별한 독서 행동read
) 그것을 다시 출력합니다 head -n1
. 그러나 head
표준 입력이 터미널 장치나 검색 가능한 파일이 아닌 경우 대부분의 구현에서는 두 줄 이상을 읽습니다.
많은 시스템에는 여전히 line
명령이 있습니다(한때 표준이었으나 나중에는 더 이상 사용되지 않음).
echo "my name is=$(line) and am from $(line)"
한 번에 한 바이트씩 읽어야 하므로 한 줄 이상의 입력을 읽지 마십시오.
사용할 수 없는 경우 언제든지 다음을 line
사용하여 시뮬레이션 할 수 있습니다 read
.
line() {
IFS= read -r line
ret=$?
printf '%s\n' "$line" || return "$ret"
}
아니면 그것을
prompt() {
printf >&2 %s "$1"
IFS= read -r answer
printf '%s\n' "$answer"
}
printf '%s\n' "my name is=$(
prompt "What is your name? ") and am from $(
prompt "Where are you from? ")"
( printf
대신 여기에서 사용됨echo
echo
일반적으로 임의의 데이터와 함께 사용할 수 없습니다.).
( 와 동일 zsh
) IFS= read -re '?What is your name? '
.
완전성을 위해 csh
또는 를 사용하여 tcsh
다음을 수행할 수 있습니다.
printf '%s\n' "my name is=$< and am from $<"
$<
입력을 변수로 읽는 csh의 방법입니다.
입력 두 줄마다 반복하려면 다음과 같은 텍스트 처리 유틸리티를 사용하는 것이 좋습니다 awk
.
awk '{name=$0; getline place; print "my name is="name" and am from "place}'
¹ in 또는 설정을 사용 하거나 in 옵션 (그리고 stdin은 터미널 장치)을 사용 read
하는 등 직접 줄 편집기를 구현하도록 구성 하지 않은 경우 출력read -e
bash
emacs
gmacs
vi
ksh93
read
에코표준 출력이 아닌 표준 오류에서.