Я пишу сценарий bash, который принимает некоторые необязательные параметры. Я хочу перевести их и передать их другому сценарию. Тем не менее, я с трудом переношу факультативные параметры изящно.Как передать дополнительные параметры другой команде в сценарии bash?
Вот набросок того, что мне удалось получить работу в псевдокоде:
a.sh:
if arg1 in arguments; then
firstArg="first argument"
fi
if arg2 in arguments; then
secondArg="second argument"
fi
./b.sh $firstArg $secondArg "default argument"
Обратите внимание на пробелы в аргументах.
b.sh:
for arg in "[email protected]"
do
echo $arg
done
Я хочу назвать b.sh
, необязательно с firstArg
и secondArg
и аргумент по умолчанию так:
./b.sh $firstArg $secondArg "default argument"
Проблема с этим состоит в том, что если $firstArg
или $secondArg
являются строками с пробелами, они будут представлены в виде нескольких аргументов, а выход будет выглядеть примерно так:
first
argument
second
argument
default argument
Хорошо, что это легко исправить, давайте захватить всю строку аргументов, добавив кавычки вокруг него, как так:
./b.sh "$firstArg" "$secondArg" "defaultArg"
Проблема, если, например, firstArg
не установлен, это приводит к пустая строка (как она будет интерпретировать ""
в качестве параметра), так что на выходе будет что-то вроде:
(blank line here)
second argument
defaultArg
Я также попытался строить строку и передать его в сценарий оболочки, но это не делает похоже, работают таким образом (it int erprets целая строка в качестве аргумента, даже если я добавляю отдельные аргументы с кавычками).
Обратите внимание, что вызов b.sh
из моей командной строки с указанными аргументами работает нормально. Есть ли способ имитировать, как это работает из сценария bash?
стороны: Просто потому, что я скопировав свинец и используя '.sh' расширение на исполняемые файлы (то есть файлы с разрешением + x, против которых будет выполняться вызов 'execv()' -family), не означает, что это хорошая идея. В общем, команды в UNIX не должны иметь никаких расширений, независимо от того, предоставлены ли они через сценарий оболочки, скрипт Python, скомпилированный двоичный файл и т. Д. –
Можете ли вы явно разъяснить, используется ли это для кода с помощью '#!/bin/sh' или '#!/bin/bash'? –
Я использую bash. – Andrew