여기 또 다른 검색 불가능한 질문이 있습니다. 어떻게 설명할 것인가 $+commands[foobar]
? 나는 그것이 의 변형이라고 생각 $commands[foobar]
하지만 누가 알겠습니까? (적어도 zsh를 사용하면나절대 모릅니다. )
또한 zsh 문서나 온라인에서 이 질문에 대한 답을 검색하는 방법을 알고 싶습니다.
답변1
이 내용은 다음과 같이 기록됩니다.zsh 문서의 매개변수 확장 섹션:
${+name}
If name is the name of a set parameter ‘1’ is substituted, otherwise ‘0’
is substituted.
예:
$ unset foo
$ if (( $+foo )); then echo set; else echo not set; fi
not set
$ foo=1
$ if (( $+foo )); then echo set; else echo not set; fi
set
에서 반환된 이름이 설정 매개변수인지 확인 $+commands[foobar]
하세요 .zsh
$commands[foobar]
답변2
변수 확장에 대한 답변은 ${+name}
기본적으로 문제를 해결합니다.
주제를 완성하기 위해 속도 비교에 대한 몇 가지 정보를 추가하고 싶었습니다. 스타일 명령어를 사용하는 이유 는 (($+commands[tree]))
배열에서 명령어를 찾는 것이 command -v tree
더 빠르기 때문이다 which -a tree
.
❯ export TIMEFMT=$'%U user %S system %P cpu %*E total'
❯ time (for i ({1..100}) if (($+commands[tree])); then echo 1 &>/dev/null; fi)
0.00s user 0.00s system 89% cpu 0.006 total
❯ time (for i ({1..100}) if command -v tree &>/dev/null; then echo 1 &>/dev/null; fi)
0.00s user 0.00s system 95% cpu 0.010 total
❯ time (for i ({1..100}) if which -a tree &>/dev/null; then echo 1 &>/dev/null; fi)
0.01s user 0.01s system 97% cpu 0.021 total