쉘 스크립트에서 에코 읽기를 사용하는 방법

쉘 스크립트에서 에코 읽기를 사용하는 방법
echo "my name is=`read` and am from `read`"

예상 출력:

my name is=sudhir and am from india

sudhirindia입력이 사용됩니다.

이를 수행하는 방법은 480개의 질문에 적용하는 것을 좋아합니다. 각 질문에 필요한 사용자 입력의 양을 모릅니다. 도와주세요.

답변1

read기본적으로 입력에서 단어를 읽습니다.변수로 변환.

`cmd`, 고대 형태 $(...)캡처산출명령. 기본적으로 read출력은 생성되지 않습니다. 읽을 내용을 입력할 때 표시되는 텍스트 read는 다음과 같습니다.에코read단말 장치의 경우 1로 출력 되지 않습니다 .

일부 read구현에서는 읽은 내용을 출력할 수 있습니다. 예를 들어, zsh내장 read함수는 -eor를 사용하여 이 작업을 수행 할 수 있습니다 -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대신 여기에서 사용됨echoecho일반적으로 임의의 데이터와 함께 사용할 수 없습니다.).

( 와 동일 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 -ebashemacsgmacsviksh93read에코표준 출력이 아닌 표준 오류에서.

관련 정보