У меня «проблема» со сценарием, который я разрабатываю в HP-UX KSH.Скрипт содержит много функций, и мне нужно передать один и тот же набор параметров между ними.Все хорошо, но некоторые параметры могут быть пустыми.Легко передавать пустые параметры, используя двойные двойные кавычки (""), но что, если я хочу передать полный набор параметров из одной функции в другую, используя $ {@}, включая пробелы?И чтобы усложнить задачу, каждый раз может быть переменное количество параметров, поэтому метод должен быть динамическим.
Пример: у меня есть функция с именем test1, которая принимает несколько параметров.Любой из них может быть пустым.Я также создал функцию с именем test2, в которую передаются все параметры test1:
test1()
{
echo 1-1: ${1}
echo 1-2: ${2}
test2 ${@}
}
test2()
{
echo 2-1: ${1}
echo 2-2: ${2}
}
# test1 "" hello
1-1:
1-2: hello
2-1: hello
2-2:
Проблема в том, что если $ {1} пусто, $ {2} из test1 выглядит как $ {1} в test2.Поэтому, чтобы обойти проблему, я создал этот код, который эффективно создает строку функции со всеми параметрами, заключенными в двойные кавычки:
test1()
{
typeset var FUNC="test2"
typeset -i var COUNT=1
echo 1-1: ${1}
echo 1-2: ${2}
while [ ${COUNT} -le ${#@} ]; do
typeset var PARAM=$(eval "echo \$${COUNT}")
FUNC="${FUNC} \"${PARAM}\""
((COUNT=COUNT+1))
done
eval "${FUNC}"
}
# test1 "" hello
1-1:
1-2: hello
2-1:
2-2: hello
Это работает очень хорошо, спасибо.Теперь к моей «проблеме».
Возможно ли на самом деле инкапсулировать вышеуказанный код в свою собственную функцию?Мне кажется уловка 22 в том, что вы должны запустить этот код, чтобы передать пустые параметры.Я должен повторить этот фрагмент кода много раз в моем сценарии, потому что я не могу найти другой путь.Есть ли один?
Любая помощь или руководство будет с благодарностью получено.