Я пытаюсь создать простую функцию на macOS Sierra, которая подсчитывает символы в строке. Это прекрасно работает (добавлено к моему bashrc
файл):В Bash, почему использование getopts в функции работает только один раз?
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
, он не признает возможность.
$ cchar
$ cchar -a "foo"
-a param: foo
$ cchar -a "foo"
$ cchar
$ cchar -a "foo"
-a param: foo
Моя конечная цель состоит в том, чтобы параметр '-a' возвращал только число строк в виде int для использования в других функциях. Я столкнулся с этой проблемой, пытаясь это сделать. –
Я попробовал 'unset opt' после цикла' while' в случае, когда var запоминается между завершением функции, не исправил ее. Кроме того, разные перенаправления не имели положительного эффекта ('& 2> 1','> & 1', [blank]) –
Перенаправления не являются параметрами командной строки. Почему они что-то влияют? – rici