名前を解決できるか簡単に調べる

組み込みコマンドの command はエイリアスや関数以外の指定したコマンドを実行するコマンドである。

$ for shell in zsh bash ksh tcsh csh; do
    printf "%-5s" $shell
    $shell -c 'command date -j -f "%Y-%m-%d" "2026-04-20" +"%Y/%m/%d"'
done
zsh  2026/04/20
bash 2026/04/20
ksh  2026/04/20
tcsh 2026/04/20
csh  2026/04/20

-v オプションを付けると、指定したコマンドが組み込みコマンド、実行ファイルのどれで解決されるかを表示する。

$ for shell in zsh bash ksh tcsh csh ; do printf "%-5s" $shell ; $shell -c 'command -v cd' ; done
zsh  cd
bash cd
ksh  cd
tcsh cd
csh  cd
$ for shell in zsh bash ksh tcsh csh ; do printf "%-5s" $shell ; $shell -c 'command -v if' ; done
zsh  if
bash if
ksh  if
tcsh if
csh  if
$ for shell in zsh bash ksh tcsh csh ; do printf "%-5s" $shell ; $shell -c 'command -v ls' ; done
zsh  /bin/ls
bash /bin/ls
ksh  /bin/ls
tcsh /bin/ls
csh  /bin/ls
$ for shell in zsh bash ksh tcsh csh ; do printf "%-5s" $shell ; $shell -c 'fn(){ :; } ; command -v fn' ; done
zsh  fn
bash fn
ksh  fn
tcsh Badly placed ()\'s.
csh  Badly placed ()\'s.
$ for shell in zsh bash ksh tcsh csh ; do printf "%-5s" $shell ; $shell -c 'alias ll="ls -l" ; command -v ll' || echo not found ; done
zsh  alias ll='ls -l'
bash not found
ksh  'ls -l'
tcsh not found
csh  not found

Bashでエイリアスも見えるようにするには、 shopt -s expand_aliases でエイリアス展開を有効にしてから実行する必要がある。このオプションはほかのシェルにはない。

$ printf "%-5s" bash ; bash -c 'shopt -s expand_aliases ; alias ll="ls -l" ; command -v ll'
bash alias ll='ls -l'

名前を解決できるか詳細に調べる

-V オプションを付けると、指定したコマンドがどのように解決されるかを詳しく表示する。

$ for shell in zsh bash ksh tcsh csh ; do printf "%-5s" $shell ; $shell -c 'command -V cd' ; done
zsh  cd is a shell builtin
bash cd is a shell builtin
ksh  cd is a shell builtin
tcsh cd is a shell builtin
csh  cd is a shell builtin
$ for shell in zsh bash ksh tcsh csh ; do printf "%-5s" $shell ; $shell -c 'command -V if' ; done
zsh  if is a reserved word
bash if is a shell keyword
ksh  if is a keyword
tcsh if is a shell keyword
csh  if is a shell keyword
$ for shell in zsh bash ksh tcsh csh ; do printf "%-5s" $shell ; $shell -c 'command -V ls' ; done
zsh  ls is /bin/ls
bash ls is /bin/ls
ksh  ls is a tracked alias for /bin/ls
tcsh ls is /bin/ls
csh  ls is /bin/ls
$ for shell in zsh bash ksh tcsh csh ; do printf "%-5s" $shell ; $shell -c 'fn(){ :; } ; command -V fn' ; done
zsh  fn is a shell function from zsh
bash fn is a function
fn ()
{
    :
}
ksh  fn is a function
tcsh Badly placed ()\'s.
csh  Badly placed ()\'s.
$ for shell in zsh bash ksh tcsh csh ; do printf "%-5s" $shell ; $shell -c 'alias ll="ls -l" ; command -V ll' ; done
zsh  ll is an alias for ls -l
bash bash: line 0: command: ll: not found
ksh  ll is an alias for 'ls -l'
tcsh /usr/bin/command: line 4: command: ll: not found
csh  /usr/bin/command: line 4: command: ll: not found
$ printf "%-5s" bash ; bash -c 'shopt -s expand_aliases ; alias ll="ls -l" ; command -V ll'
bash ll is aliased to `ls -l'

組み込みコマンドの type は指定した名前が組み込みコマンド、実行ファイルのどれで解決されるかを詳しく表示する。 command -V と同じ内容を出力する。

$ for shell in zsh bash ksh tcsh csh ; do printf "%-5s" $shell ; $shell -c 'type cd' ; done
zsh  cd is a shell builtin
bash cd is a shell builtin
ksh  cd is a shell builtin
tcsh cd is a shell builtin
csh  cd is a shell builtin
$ for shell in zsh bash ksh tcsh csh ; do printf "%-5s" $shell ; $shell -c 'type if' ; done
zsh  if is a reserved word
bash if is a shell keyword
ksh  if is a keyword
tcsh if is a shell keyword
csh  if is a shell keyword
$ for shell in zsh bash ksh tcsh csh ; do printf "%-5s" $shell ; $shell -c 'type ls' ; done
zsh  ls is /bin/ls
bash ls is /bin/ls
ksh  ls is a tracked alias for /bin/ls
tcsh ls is /bin/ls
csh  ls is /bin/ls
$ for shell in zsh bash ksh tcsh csh ; do printf "%-5s" $shell ; $shell -c 'fn(){ :; } ; type fn' ; done
zsh  fn is a shell function from zsh
bash fn is a function
fn ()
{
    :
}
ksh  fn is a function
tcsh Badly placed ()\'s.
csh  Badly placed ()\'s.
$ for shell in zsh bash ksh tcsh csh ; do printf "%-5s" $shell ; $shell -c 'alias ll="ls -l" ; type ll' ; done
zsh  ll is an alias for ls -l
bash bash: line 0: type: ll: not found
ksh  ll is an alias for 'ls -l'
tcsh /usr/bin/type: line 4: type: ll: not found
csh  /usr/bin/type: line 4: type: ll: not found
$ printf "%-5s" bash ; bash -c 'shopt -s expand_aliases ; alias ll="ls -l" ; type ll'
bash ll is aliased to `ls -l'