Например, если у меня есть скрипт ./foo, который принимает 10 параметров, и я хочу передать только 8-й параметр. В настоящее время я знаю, как это сделать:
./foo '' '' '' '' '' '' '' 'bar'
Есть ли более простой / лучший способ?
shell-script
parameter
Керри Рэндольф
источник
источник
Ответы:
Другой способ сделать это - назвать параметр, который вы хотите объявить, и затем сделать это:
ВЫХОД
В приведенном выше примере явно объявленная переменная среды предпочтительнее аргумента командной строки, но аргумент командной строки используется, когда переменная среды пуста или не установлена. Когда и восьмые позиционные и переменная окружения
$eight
являются пустыми или сбросить значение по умолчанию some_default присваиваются$eight
. В любом случае,:
можно удалить из операторов:-
or,:=
если пустое значение должно быть приемлемым.Переменная
$eight
могла также быть установлена как:... и предыдущая строка полностью опущена, но я хотел продемонстрировать, что объявление переменной таким образом приводит к постоянному значению, и поэтому я сделал это двумя командами. В любом случае
$eight
устанавливается конечное значение расширения этого составного параметра.getopts
- для надежных сценариев - часто это лучший способ обработки параметров команды . Позиционные параметры, с другой стороны, почти всегда являются наиболее простым средством надежной обработки операндов в скрипте.Например:
ВЫХОД
Там мы видим только восьмой операнд, но 101 из них выведен из моего тестового каталога.
источник
Предполагая, что вы можете изменить скрипт, вы должны рассмотреть возможность использования необязательных параметров (опций) вместо обязательных параметров (аргументов).
Если у вас есть каждый из первых 7 семи параметров в качестве параметров, и для них по умолчанию задана пустая строка, вы можете просто сделать:
Если вы используете POSIX-совместимую оболочку, вы можете использовать
getopts
утилиту или программуgetopt
.bash
- как и большинство снарядов - предлагаетgetopts
как встроенный. В любом случае это проще, чем использовать собственный анализатор командной строки.Если вы не реализуете что-то наподобие последних X неопциональных аргументов, это значения для последних Y-аргументов и XY-аргументов параметров, вы должны предоставить строки параметров перед каждой из 7 (теперь пустых) строк, если вы хотите установить любой из них. Это, однако, не является обычной практикой, обычно опция всегда является опцией, а аргумент аргументом, и порядок опции «вставка» свободен.
источник
+1
дляgetopt(s)
. Позиционные параметры - печальное время, и их следует избегать.