zsh 매개변수 확장

zsh 매개변수 확장

매개변수 확장을 사용하여 변수 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은 아무것도 인쇄하지 않고 빈 줄을 인쇄합니다.$fpathprint -rC1 -- $fpathprint -rlprintf '%s\n'

print -rC1 -- "$array[@]"

아마도 한 줄에 하나의 배열 요소를 인쇄하려는 내용에 가장 가깝습니다. bash/ 에 ksh쓸 수 있습니다.

[ "${#array[@]}" -eq 0 ] || printf '%s\n' "${array[@]}"

관련 정보