Мой скрипт интерпретируется/bin/sh и использует getopts. Когда я делаю:Проблема с getopts и аргумент, содержащий два '*'
$ ./check_files.sh -d /tmp -td -x*a*
Ма аргумент -x хорошо используется (в конце):
+ find /tmp/geany_socket.9912fb56 /tmp/gpg-OBxSqk /tmp/log /tmp/ssh-bfbl8kSNDM8o /tmp/systemd-private-0a769fff0c124fed8a42ec56733ade46-systemd-timesyncd.service-09Wbx1 /tmp/. /tmp/.. /tmp/.ICE-unix /tmp/.Test-unix /tmp/.X0-lock /tmp/.X11-unix /tmp/.XIM-unix /tmp/.font-unix /tmp/.xfsm-ICE-BILXKY -prune -type d ! -name *a*
Но если я заменить 'а' с 'я':
$ ./check_files.sh -d /tmp -td -x*i*
я получаю это:
+ find /tmp/geany_socket.9912fb56 /tmp/gpg-OBxSqk /tmp/log /tmp/ssh-bfbl8kSNDM8o /tmp/systemd-private-0a769fff0c124fed8a42ec56733ade46-systemd-timesyncd.service-09Wbx1 /tmp/. /tmp/.. /tmp/.ICE-unix /tmp/.Test-unix /tmp/.X0-lock /tmp/.X11-unix /tmp/.XIM-unix /tmp/.font-unix /tmp/.xfsm-ICE-BILXKY -prune -type d ! -name check_files.sh
по уникальной причине у меня есть файл с «я» в его имени в моем текущем каталоге, это имя передается команде FIND (вместо фактического аргумента Wich является *i*
. Я тестировал с некоторыми другими файлами ...
У меня нет этой проблемы с одним «*» в аргументе.
Я пытался использовать простые и двойные кавычки, но получаю те же результаты.
Кто-нибудь, чтобы объяснить мне, почему?
Я использую shebang #!/usr/bin/env sh
, который вызывает тире. Я также запускал скрипт с bash --posix
, у меня есть другой результат, но по-прежнему та же проблема, которую я описал выше.
По просьбе @kenorb:
(x)
SEARCH_NAME_EXCLUDE="${OPTARG}";
(i)
SEARCH_NAME_INCLUDE="${OPTARG}";
;;
[…]
find_name_clause() {
if [ -n "$1" ]
then
FIND_NAME_CLAUSE=" -name $1 "
fi
if [ "$1" -a "$2" ]
then
FIND_NAME_CLAUSE="${FIND_NAME_CLAUSE} -a "
fi
if [ -n "$2" ]
then
FIND_NAME_CLAUSE="${FIND_NAME_CLAUSE} ! -name $2 "
fi
}
find_name_clause "${SEARCH_NAME_INCLUDE}" "${SEARCH_NAME_EXCLUDE}"
FIND_CLAUSE="${FIND_TYPE_CLAUSE} ${FIND_NAME_CLAUSE}"
[…]
nb_files() {
NB_FILES=$(find $1 $2 |wc -l)
}
nb_files "${search} ${FIND_CLAUSE}"
Не могли бы вы поделиться соответствующий код вашего скрипта, особенно найти команду? Возможно, вы должны запустить скрипт как '-x '* a *'', так как globbing будет расширен до запуска вашего скрипта. – kenorb