您能提供一下见解吗复杂命令的替代形式?
我在这个文档上花了很长时间,但它可以变得更清晰。
我正在寻找if
, for
, foreach
, while
, until
, repeat
, case
,select
和的清晰示例function
。
答案1
这些只是一些命令的较短形式,主要是去掉then
、fi
、do
、done
等“冗余”保留字。长格式更便于移植;短的仅适用于zsh
.
例如长形式if
if [[ -f file ]] ; then echo "file exists"; else echo "file does not exist"; fi
不仅可以在其他 shell 中工作zsh
,还可以在其他 shell 中工作(用单括号替换双括号以获得更多的可移植性)
而短格式
if [[ -f file ]] { echo "file exists" } else { echo "file does not exist" }
if [[ -f file ]] echo file exists
仅适用于zsh
.
另一个例子,这次是for
循环。
长格式:
for char in a b c; do echo $char; done
for (( x=0; x<3; x++ )) do echo $x; done
短的:
for char in a b c; echo $char
for char (a b c) echo $char # second version of the same
foreach char (a b c); echo $char; end # csh-like 'for' loop
for (( x=0; x<3; x++ )) echo $x # c++ version
for (( x=0; x<3; x++ )) { echo "$x"; } # also works in bash and ksh
我相信您明白了 - 我们只是删除不必要的单词,如果列表需要与其他内容分开,请用 括起来{}
。其余命令:
尽管
x=0; while ((x<3)); do echo $((x++)); done # long x=0; while ((x<3)) { echo $((x++)) } # short x=0; while ((x<3)) echo $((x++)) # shorter for single command
直到
x=0; until ((x>3)); do echo $((x++)); done # long x=0; until ((x>3)) { echo $((x++)) } # short x=0; until ((x>3)) echo $((x++)) # shorter for single command
重复
repeat 3; do echo abc; done # long repeat 3 echo abc # short
案件
word=xyz; case $word in abc) echo v1;; xyz) echo v2;; esac # long word=xyz; case $word { abc) echo v1;; xyz) echo v2 } # short
选择
select var in a b c; do echo $var; done # long select var in a b c; echo $var # short select var (a b c) echo $var # shorter
功能
function myfun1 { echo abc; } # long function myfun2; echo abc # short myfun3() echo abc # shorter and Bourne-compatible