Как поймать optioned и не optioned аргументы правильно?

Найдите имеет -exec оператор, который выполняет произвольную команду. Еще лучше, -exec тест, таким образом, можно объединить несколько в цепочку -execs вместе, и если более ранние команды перестали работать, более поздние не будут выполняться. Строка {} заменяется текущим именем файла, и ; отмечает конец команды. Необходимо заключить обоим в кавычки для предотвращения вмешательства оболочки.

Так:

find . -type f \
    -exec grep -q 'Ms. Johnson' '{}' \; \
    -exec sed -i'.bup' -e's/Ms. Johnson/Mrs. Melbin/g' '{}' \;
3
24.01.2012, 14:10
2 ответа

Это типично для программ, чтобы вынудить "some_string" часть быть последним аргументом так, чтобы .abc.ksh "some_string" -a "sample text" ошибка. Если Вы делаете это, то после парсинга опций, $OPTIND содержит индекс к последнему аргументу ( "some_string" часть).

Если это не приемлемо, то можно проверить вначале (перед вводом while видеть, существует ли неснабженный префиксом аргумент. Это позволит Вам иметь "some_string" вначале и в конце. Если бы у Вас должен был быть он в середине, то Вы не могли бы или использовать getopts или у Вас могло быть два набора getopts. Когда первая ошибка, это могло произойти из-за неснабженного префиксом аргумента; получите его и запустите новое getopts получить остающийся args. Или можно пропустить getopts все вместе и решение для самокрутки.

5
27.01.2020, 21:15

После получения Ваших опций

shift $OPTIND
if [ $# -eq 1 ]; then
  some_str="$1"
else
  echo "Error: missing argument" >&2
fi
1
27.01.2020, 21:15
  • 1
    Для ./abc.ksh "some_string" -a "sample text", это не будет работать. –  chanchal1987 08.03.2011, 14:18
  • 2
    Хорошо для getopts, Вы ограничиваетесь инструментом: "Любое следующее определяет конец опций: специальная опция - находя аргумент, который не начинается - или обнаружение с ошибкой". право –  glenn jackman 08.03.2011, 15:48

Теги

Похожие вопросы