프롬프트에서 cowsay 기능을 사용하는 동안 프롬프트 다음에 줄바꿈을 하고 싶습니다.
read -p "$(cowsay "do you know this word?") \n" answer
이 문제에 대한 답변은 여러 가지가 있습니다.
1)https://stackoverflow.com/questions/4296108/how-do-i-add-a-line-break-for-read-command/4296147
2)https://stackoverflow.com/questions/12741529/how-to-break-a-line-add-a-newline-in-read-p-in-bash
그러나 답변은 명령을 ''
해결하지 않는 표기법을 사용합니다.cowsay
답변1
-p
쉘 이 필요한 옵션을 사용하는 이유는 무엇입니까 bash
?
그냥 해:
cowsay "do you know this word?"
read answer
에서 bash
이 옵션은 경우에 따라 프롬프트를 다시 그려야 할 수 있는 ( 's 를 's 처럼 동작하게 만드는 또 다른 확장 ) -p
과 함께 사용할 때만 유용합니다 (예: upon ). 그러나 여러 줄인 경우 해당 프롬프트를 다시 그릴 필요도 없고 원하지도 않을 것입니다.-e
bash
bash
read
zsh
vared
bash
Ctrl+L
원한다면 언제든지 다음을 수행할 수 있습니다.
read -ep "$(cowsay "do you know this word?")"$'\n' answer
(여기서는 $'...'
C와 유사한 이스케이프 시퀀스를 이해하는 ksh93의 인용 형식을 사용합니다)
또는
read -ep "$(cowsay "do you know this word?")
" answer
보다 일반적으로 문제는 명령 대체가 명령 출력 끝에서 개행 문자(단지 하나가 아니라 버그/잘못된 기능으로 간주될 수 있는 모든 문자)를 제거한다는 것입니다.
이 문제를 해결하려면 일반적인 방법은 다음과 같습니다.
output=$(cowsay "do you know this word?"; echo .)
output=${output%.}
read -p "$output" answer
즉, .\n
출력에 추가합니다. 명령 대체는 를 제거 하고 전체 명령의 출력을 남겨 두고 \n
를 제거합니다 ( 가 아닌 쉘에 NUL 문자가 포함되어 있지 않고 의 현재 로케일에서 유효한 텍스트인 경우 )..
${output%.}
zsh
yash
참고로 다른 Korn과 유사한 쉘에서 read
프롬프트 자체를 발행하는 구문은 다음과 같습니다.
read 'answer?prompt: '
Korn 쉘은 또한 터미널에서 읽을 때 해당 프롬프트를 다시 그리며 편집기 옵션이 활성화되었습니다(예: set -o emacs
또는 set -o vi
). zsh
또한 호환성을 위해 해당 구문을 지원하지만 줄 편집기는 에만 사용되며 거기 vared
에는 사용되지 않습니다 read
.
¹ 예를 들어, basename=$(basename -- "$file")
다음에 의해 추가된 것뿐만 아니라 파일 이름 끝에서 개행 문자를 제거할 수 있기 때문에 잘못된 것과 같은 일이 발생합니다.basename