【发布时间】:2017-12-07 05:45:01
【问题描述】:
我在一个打算在dash和bash内包的shell脚本中做了一些选项解析,在bash得到了一些奇怪的结果,所以我把脚本的精髓放在了:
./getopts :
fn()
{
local verbose opt
while getopts "v" opt; do
case "$opt" in v) verbose=1;; ?) return 1;; esac
done; shift $((OPTIND - 1))
echo -n "'$verbose' "
}
fn -v; fn -v; fn -v; printf '\n'
并使用不同的 (local-supporting) shell 运行它:
for sh in bash dash posh zsh; do echo SH=$sh; $sh ./getopts; done
我得到的结果是:
SH=bash
'1' '' ''
SH=dash
'1' '1' '1'
SH=posh
'1' '' '1'
SH=zsh
'1' '1' '1'
造成这些差异的原因是什么?是bash 和posh 还是我的脚本有问题?
【问题讨论】:
标签: bash shell posix zsh dash-shell