Я обязан использовать /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
работать и поддерживать в нем пробелы?