read
어떻게 든 후행 기호를 변수 \n
에 넣을 수 없습니다 . 어떤 경우든 다른 문자가 없을 때 한 문자만 에코하여 빈 줄이 발생하는 것을 REPLY
방지하고 싶습니다 . \n
반면:read
echo
declare -l REPLY
read >&2 -r -N 1 -p "Acknowledged? (y):" REPLY
if [[ "$REPLY" != $'\n' ]]; then
echo >&2
fi
나에게 가능한 해결 방법은 입력을 read
억제()하는 것이었습니다. -s
그러나 이상적으로는 사용자가 프롬프트 다음에 입력한 단일 문자를 볼 수 있어야 합니다.
또한 변수에 문자를 넣을 IFS= read -d''
수도 없습니다 \n
.
어떤 아이디어가 있나요?
답변1
FWIW, 귀하의 코드가 저에게 효과적입니다.
$ echo | bash -c 'read -rN1; echo "$BASH_VERSION <$REPLY>"'
4.2.36(1)-release <
>
사용하면 -N
설정이 필요하지 않으며 IFS
NL은 결국 $REPLY에 표시됩니다. NULL은 $REPLY
단지 NUL( <Ctrl-Space>
), EOF 또는 오류를 의미합니다(두 경우 모두 종료 상태는 0이 아님).
답변2
Read는 \n
레코드 구분 기호로 사용되므로 로 끝나지 않습니다 $REPLY
. echo
확인하려는 경우에는 .오직줄(즉, 빈 줄)에 개행 문자가 있는 경우 다음 테스트 중 하나가 작동합니다.
[[ $REPLY == "" ]] # true if line is empty
(( ${#REPLY} )) # true if line is not empty
read
를 사용하여 호출하지 않으므로 IFS=
공백만 포함된 입력과도 일치합니다.
답변3
Chris가 언급했듯이 구분 기호이지만 문자열 길이를 확인하려면 다음을 수행하십시오.
if [ -z "$REPLY" -o "$REPLY" == "y" ]; then
echo "It was acknowledged"
else
echo "Not acknowledged"
exit 1
fi