$+commands[...]의 +는 무엇을 합니까?

$+commands[...]의 +는 무엇을 합니까?

여기 또 다른 검색 불가능한 질문이 있습니다. 어떻게 설명할 것인가 $+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

관련 정보