Bash 스크립트의 같은 줄에서 읽기 변수를 평가합니다.

Bash 스크립트의 같은 줄에서 읽기 변수를 평가합니다.

Bash 스크립트에서 이 명령으로 반환된 값을 가져오려고 했지만 아무것도 반환하지 않는 것 같습니다.

rr=$(read -p Enter -r)

echo "Is $rr"
read -p "java archive detected, Enter Y to download it again, N to continue $nl" -r
if [[ $REPLY =~ ^[Yy]$ ]] && [[ $(read -p Enter -r) == "Y" ]]; then

        echo "Y entered $REPLY"
        break;

    elif [[  $REPLY =~ ^[Nn]$  ]]; then

        echo "java Archive was extracted successfully to $java8Dir $nl"

    fi

답변1

이는 read명령 대체( $()) 내에서 실행 중이기 때문입니다. 그럴 필요가 없습니다. 그냥 사용:

read -p Enter -r rr
echo "Is $rr"

var=$(command)구문은 의 값을 var의 반환 값으로 설정합니다 command. 내장 함수는 read아무 것도 반환하지 않으므로(종료 상태는 제외하지만 여기서는 관련이 없음) 변수가 비어 있습니다. 구문은 값을 설정한다는 read것입니다 .read VAR$VAR

답변2

올바른 구문 은 다음 read과 같습니다.

read [-ers] [-a 이름] [-d delim] [-i 텍스트] [-n nchars] [-N nchars] [-p 프롬프트] [-t 시간 ​​초과] [-u fd] [name .. ]

(에서 man bash)

  • 첫 번째 줄은 다음과 같아야 합니다 read -p Enter -r rr(정말 백슬래시를 취소해야 합니까?).
  • 내부 테스트는 다음을 읽어야 합니다.

    if ... && [[ "$(read -p Enter R ; echo $R )" == "Y"  ]] ; tehn
    

답변3

이 명령은 read -p Enter -r사용자가 입력한 값을 $REPLY(Bash) 변수에 배치합니다. 따라서 다음과 같이 작동합니다.

$ read -p Enter: -r
Enter:hello
$ echo "$REPLY"
hello

따라서 var rr에 사용자 입력을 원하는 경우 다음을 수행하십시오.

$ read -p "Enter: " -r rr
Enter: hello
$ echo "$rr"
hello

또는 한 줄로:

$ read -p "Enter: " -r rr; echo "$rr"
Enter: hello
hello

변수를 읽고 인쇄하기 위해 (스크립트에서) 수행해야 할 작업은 다음과 같습니다.

read -p "Enter : " -r rr
echo "Is $rr"

관련 정보