Я обязан использовать /bin/sh
. :(
В следующем примере мне нужно передать необязательный динамически создаваемый аргумент команде openssl
:
#!/bin/sh
function foo() {
local dynamic_arg="-passout pass:$1"
if [ -z $1 ]; then
dynamic_arg=""
fi
echo ${dynamic_arg}
openssl genrsa "${static_arg}" ${dynamic_arg} ...
}
Вывод, если $1
содержит пробелы (например, qw er
):
-passout pass:qw er
usage: genrsa [args] [numbits]
...
Проблема в том, что когда $1
содержит пробелы и не использует кавычки для использования ${dynamic_arg}, openssl будет интерпретировать мой аргумент как дополнительные аргументы из-за пробелов.
Если я использую кавычки для использования dynamic_arg
:
openssl genrsa "${static_arg}" "${dynamic_arg}" ...
тогда ошибка та же самая, потому что openssl теперь интерпретирует мои 2 аргумента внутри dynamic_arg
как один (вместо 2).
Если я использую кавычки (как простые, так и двойные) внутри инициализации dynamic_arg
:
local dynamic_arg="-passout \"pass:$1\""
и не цитируя использование dynamic_arg
:
openssl genrsa "${static_arg}" ${dynamic_arg} ...
он по-прежнему будет жаловаться (отображая использование) для dynamic_arg
со значением:
-passout "pass:qw er"
Как я могу заставить этот dynamic_arg
работать и поддерживать в нем пробелы?