我试图在macOS Sierra上创建一个简单的函数来计算字符串中的字符。这很好用(添加到我的bashrc
文件中):
function cchar() {
str=$1
len=${#str}
echo "string is $len char long"
}
$ cchar "foo"
string is 3 char long
我尝试使用-a
选项扩展它,所以我将其添加到我的函数中(并将其余部分注释用于测试):
while getopts "a:" opt; do
case $opt in
a)
echo "-a param: $OPTARG" >&2
;;
esac
done
在写完这篇文章后进行了一些测试,我发现每次运行cchar -a "test"
时都会注意到,我必须在没有选项(cchar
)的情况下运行它,否则下次我用{{-a
运行它时1}}选项,它不识别该选项。
$ cchar
$ cchar -a "foo"
-a param: foo
$ cchar -a "foo"
$ cchar
$ cchar -a "foo"
-a param: foo
答案 0 :(得分:6)
您必须重置变量OPTIND
,它会跟踪当前位置参数号。它应该足以让你的函数本地变量。
答案 1 :(得分:0)
我最终使用的最终代码:
# Count characters in a string
function cchar() {
local OPTIND
while getopts "a:" opt; do
case $opt in
a)
echo ${#OPTARG}
return
;;
esac
done
echo "string is ${#1} characters long"
}
$ cchar "foo bar"
string is 7 characters long
$ cchar -a "foo bar"
7
注意:我必须使用return
代替exit
,当来自.bashrc
时,exit
会关闭当前的shell。