Я попытался использовать подстановку параметров, которая показалась мне самым простым путем
Это самый простой способ (просто имейте в виду, что, как следует из названия - и как указано в комментарии, оболочка расширяет параметр / переменную );
используйте $ {var% - *}
для (неохотно) удаления суффикса (в данном случае начиная с последнего -
):
for f in ./*-uniq.tar.gz
do
printf %s\\n "${f%-*}"
done
или $ {var: offset: length}
чтобы удалить последние N символов (где длина - отрицательное целое число):
for f in ./*-uniq.tar.gz
do
printf %s\\n "${f:0:-12}"
done
Для этого скрипта требуется как минимум один аргумент, в противном случае он отображает информацию об использовании. Должно быть echo $USAGE >&2
, так как это ошибка. Другие скрипты могут работать с нулевыми аргументами, поэтому вам придется модифицировать. Так же, как некоторые не принимают аргумент i
.
Да, они разные:
"?"
говорит кейсу искать ?
. Это то, что возвращает getopts, когда находит опцию, которую не ожидает (недопустимая опция ). *
говорит случай, сделайте это, если вы не найдете другого соответствия. Этого не должно быть, но может. Вероятно, это указывает на ошибку в getopts или, что более вероятно, на вашу программу (, см. защитное программирование ). Они должны быть одинаковыми.
Однако этот код имеет свою долю проблем:
shift "$(($OPTIND - 1))"
==
оператора "$#"
иecho "$USAGE"
script --
v
, h
, i
и:i:vh