Я намерен передать переменную в качестве параметра моей функции. (Целью этой функции является подключение к Terdata, выборка из десяти записей из таблицы и запись в файл). Но моя функция не вызывается, а имена файлов в домашнем пути отображаются.Передача переменной в качестве аргумента функции UNIX
Есть ли способ передать значение аргумента в качестве переменной.
Ниже мой сценарий:
#!/bin/ksh
set -x
my_first_fn()
{
query="SEL TOP 10 * FROM XYZ.TABLENAME"
${BTEQ} << EOF
.logon ${pSERVER}/${pUSERNAME},${pPWD};
.set width 6000;
.set separator ',';
.set titledashes off;
.EXPORT FILE = '${home}/BTEQ.txt';
${stmt};
.EXPORT RESET
.IF ERRORCODE <> 0
THEN .GOTO EXITERR
.QUIT 0;
.LOGOFF;
.LABEL EXITERR
.QUIT 1;
.LOGOFF;
EOF
}
LOG_FILE=${home}/myscript.log
my_first_fn $query | tee ${LOG_FILE}
Заранее спасибо ... :-)
Вы пытались уменьшить объем своей программы? Я не думаю, что вам нужно иметь этот материал SQL в 'my_first_fn()', чтобы выяснить, как передать аргументы функции. Я, конечно, не хочу этого беспокоиться. Но глядя на ваш звонок ... почему вы * вызываете * 'my_first_fn()' с '$ query' в качестве параметра -' query' является переменной, только * определенной * в 'my_first_fn()'? – DevSolar
Также, используйте 'set -vx', чтобы увидеть код a.) до его выполнения, b.) с переменными, расширенными до их значений. Вы должны увидеть, где «имена файлов на домашнем пути» прокрадываются. Удачи. – shellter
Вы не определяете 'BTEQ' в этом коде, я предполагаю, что он находится в среде. Вы определяете 'query' * в функции *, поэтому вы фактически не передаете никаких аргументов, когда вы' my_first_fn $ query'. Вы не используете 'query', а переменная' stmt' не определена. Таким образом, код, который вы используете, и код, который вы показываете, вероятно, разные. Решение вашей проблемы, скорее всего, будет ** цитировать ваши переменные **: 'my_first_fn" $ query "' –