저는 Unix, Linux 및 OS X의 Shell 프로그래밍 제4판을 읽고 있습니다.
P.112에서는 이에 대한 예를 보여줍니다.
$ lines=one'
> 'two
$ echo "$lines"
one
two
$ lines=ones\
> two
$ echo "$lines"
onetwo
$
첫 문장에서 막혔어요.
내가 시도한 것은 이것입니다.
jackson@jackson-VirtualBox:~$ lines=one'>'two
jackson@jackson-VirtualBox:~$ echo "$lines"
one>two
jackson@jackson-VirtualBox:~$ $lines=one'>'two
one>two=one>two: command not found
jackson@jackson-VirtualBox:~$ lines=one \n '>'two
n: command not found
jackson@jackson-VirtualBox:~$ lines=one' \n>'two
jackson@jackson-VirtualBox:~$ echo "$lines"
one \n>two
jackson@jackson-VirtualBox:~$ lines=one'>'two
jackson@jackson-VirtualBox:~$ lines=one'\n>'two
jackson@jackson-VirtualBox:~$ echo "$lines"
one\n>two
jackson@jackson-VirtualBox:~$ lines=one\n>two
jackson@jackson-VirtualBox:~$ echo "$lines"
onen
내 질문은: 입력 방법입니다.
$ lines=one'
> 'two
답변1
이는 다음과 같이 입력됩니다.
lines=one'
'two
즉, 첫 번째 따옴표 다음에 Enter를 누르십시오.
따옴표 안에 있기 때문에 bash는 다음 입력 줄(닫는 따옴표로 시작)을 이전 줄의 일부로 처리합니다. 이것은 >
이전 줄에서 계속하기 위해 더 많은 입력을 받아들일 준비가 되었다는 bash의 힌트일 뿐입니다. 이는 입력하라는 의미가 아닙니다.
프롬프트는 $PS2
"보조 프롬프트 문자열"이라고도 알려진 변수의 값입니다. 연속/보조 입력 라인에 사용되며 $PS1
주 입력 라인에는 사용되지 않습니다. 시스템에서 이들이 어떻게 정의되어 있는지 확인 하십시오 declare -p PS1 PS2
. 사람들이 PS1을 사용자 정의하는 것은 일반적이지만 PS2를 사용자 정의하는 경우는 더 드뭅니다(따라서 이것이 기본값일 수 있음 >
).
최신 버전의 bash(및 기타 bourne 유사 쉘)를 사용하여 동일한 작업을 수행하는 또 다른 방법은 다음과 같습니다.
lines=$'one\ntwo'
not을 사용하면 $'...'
단순히 bash가 문자열의 이스케이프 코드(예: 줄 바꿈)를 '...'
해석하도록 지시합니다 .\n
답변2
글쎄요, vars에 줄바꿈을 추가하는 방법에는 여러 가지가 있지만 실제로는 다음과 같은 질문을 하신 것 같습니다.
새로운 프롬프트에서,
- 유형lines=one
- 작은따옴표를 입력
'
하고 다음을 누르세요.enter - 입력을 기다리는 ">" 프롬프트가 나타납니다.
- 유형 '과two
- enter완료하려면 누르세요 .
물론 다음을 사용하여 변수에서 개행 문자를 얻을 수 있습니다.
lines=$'one\ntwo' # in bash, zsh
lines=$(printf 'one\ntwo') # in any shell
예를 들어. 더 많은 솔루션이 필요하면 문의하세요.