echo “$USER:staff”가 zsh: 잘못된 대체를 발생시키는 이유는 무엇입니까?

echo “$USER:staff”가 zsh: 잘못된 대체를 발생시키는 이유는 무엇입니까?

그렇지 않기 때문에 의아해합니다 echo "PATH=$PATH:/usr/local/sbin"(그것이 와 관련이 있다고 생각했습니다 :).

또한 Bash에서는 두 명령 모두 예상대로 작동합니다.

$ echo "PATH=$PATH"
PATH=/usr/local/bin

$ echo "PATH=$PATH:/usr/local/sbin"
PATH=/usr/local/bin:/usr/local/sbin

$ echo "$USER:staff"
zsh: bad substitution

답변1

:safter는 다음 $USER과 같이 해석되기 때문에확장 수정자. 다음을 수행하면 이를 명확하게 확인할 수 있습니다.

% autoload -Uz compinit; compinit       # Init completion system
% zstyle ':completion:*' group-name ''  # Enable completion grouping
% zstyle ':completion:*' format '%d'    # Add titles to the groups
% print $USER: # and press Tab or ^D right after the `:`
modifier
&  -- repeat substitution
A  -- as ':a', then resolve symlinks
P  -- realpath, resolve '..' physically
Q  -- strip quotes
a  -- absolute path, resolve '..' lexically
c  -- PATH search for command
e  -- leave only extension
g  -- globally apply s or &
h  -- head - strip trailing path element
l  -- lower case all words
q  -- quote to escape further substitutions
r  -- root - strip suffix
s  -- substitute string
t  -- tail - strip directories
u  -- upper case all words

그리고 위 목록에서 볼 수 있듯이 :/확장 수정자가 아닙니다.

${PATH}그러면 항상 , 등을 사용하는 것이 좋습니다 ${USER}.

아니요, 보통은 그냥 사용해도 괜찮지만 $USER,때때로,보시다시피 를 사용해야 합니다 ${USER}. :)

그러나 귀하의 질문에 있는 코드와 관련하여 Zsh에서 사용할 수 있는 두 가지 다른 권장 사항을 알려드릴 수 있습니다.

% print $PATH
/usr/local/bin

% print $path
/usr/local/bin

% path+=/usr/local/sbin  # $path is an array, not a string

% print $PATH            # $path and $PATH are "tied" & automatically in sync
/usr/local/bin:/usr/local/sbin

% print -c $path         # Print the items in columns, like `ls`
/usr/local/bin   /usr/local/sbin

% print -l $path         # Print one item per line, like `ls -l`
/usr/local/bin
/usr/local/sbin

% path+=/usr/local/sbin

% print -c $path       
/usr/local/bin   /usr/local/sbin  /usr/local/sbin

% typeset -U PATH path   # Make each item unique/Eliminate duplicates

% print -c $path       
/usr/local/bin   /usr/local/sbin

관련 정보