매개변수 확장을 사용하여 변수 fpath의 내용을 열 형식으로 표시하려고 시도했지만 실패했습니다.
몇 가지 시도와 웹 검색 끝에 제가 원했던 바로 그 솔루션을 찾았습니다. 이것은:
print -C1 $fpath
하지만 다른 방법으로 이 작업을 수행하는 방법을 알고 싶습니다. 내가 얻은 가장 가까운 것은 다음과 같습니다.
echo ${fpath//' '/'\n'}
하지만 공백 문자를 인식할 수 없으므로 "\n" 대체가 발생하지 않습니다. 나는 아무 소용이 없었습니다.
echo ${fpath// /'\n'}
echo ${fpath//'\t'/'\n'}
호기심 때문에 내가 뭘 잘못하고 있는지 알고 싶습니다.
답변1
fpath
배열입니다. 이를 문자열로 다운그레이드한 다음 그 안의 문자를 개행 문자로 바꾸려고 해서는 안 됩니다.
ksh
다음과 같은 배열 확장 구문을 사용하십시오 .
$ printf '%s\n' "${fpath[@]}"
/usr/local/share/zsh/site-functions
/usr/share/zsh/site-functions
/usr/share/zsh/5.7.1/functions
와 함께 또는 를 zsh
사용할 수도 있습니다 ."$fpath[@]"
"${(@)fpath}"
다음과 같이 할 수도 있습니다.
$ printf '%s\n' $fpath
/usr/local/share/zsh/site-functions
/usr/share/zsh/site-functions
/usr/share/zsh/5.7.1/functions
그러나 배열의 빈 요소는 건너뜁니다(이는 문제가 되지 않을 수 있음 $fpath
).
zsh
내장 print
함수는 이 옵션을 사용하여 한 줄에 하나의 요소를 인쇄할 수도 있습니다 -l
. 내장 함수가 ksh
어디에서 오는지와 마찬가지로 임의의 원시 데이터를 인쇄하는 print
옵션이 필요하므로 다음과 같습니다.-r
print -rl -- $fpath
표준과 동일합니다 printf '%s\n'
.
빈 목록인 -C1
경우 와는 다릅니다 . 이 경우 while은 아무것도 인쇄하지 않고 빈 줄을 인쇄합니다.$fpath
print -rC1 -- $fpath
print -rl
printf '%s\n'
print -rC1 -- "$array[@]"
아마도 한 줄에 하나의 배열 요소를 인쇄하려는 내용에 가장 가깝습니다. bash
/ 에 ksh
쓸 수 있습니다.
[ "${#array[@]}" -eq 0 ] || printf '%s\n' "${array[@]}"