Bash: eval и строка "return" - PullRequest
       30

Bash: eval и строка "return"

1 голос
/ 08 сентября 2011

Редактировать: я создаю bash-скрипт для запуска запросов Netezza.

вот пример того, что мне нужно сделать:

nzsql -host localhost -port 123456 -d db -u usr -pw pwd -A -t -c "insert into TABLE (name,surname) values ('m','sc')"

и он должен вернуть

INSERT 0 1

Мне нужно получить число «1», которое означает, что была вставлена ​​1 строка.

Для этого мне нужно получить всю строку «INSERT 0 1» и поработать с ней..

в соответствии с http://www.enzeecommunity.com/thread/2423 это должно работать:

cmnd_output=`nzsql -host $NZ_HOST -d $NZ_DATABASE -u $NZ_USER -pw $NZ_PASSWORD -A -t -c "insert into TEST values ('test 1')"`

Но я не могу заставить его работать с этим: ($ 2 правильно, потому что когда я запускаю его изтерминал работает просто отлично)

cmd_out=`$2` or cmd_out=`"$2"` or cmd_out="`$2`" or cmd_out=`"'$2'"`
cmd_out=$($2) or cmd_out="$($2)" or cmd_out=$("$2")

Он говорит мне, что команда не найдена ... точно так же, как если бы была проблема с "строковой кавычкой" с $ 2

Мне, однако, удалосьвыполнить $ 2 с помощью eval

eval "$2"

, и это прекрасно работает, команда $ 2 выполняется просто отлично.Но я не могу использовать eval в этом случае, так как хочу сохранить в переменной «INSERT 0 1».

Спасибо

Ответы [ 3 ]

2 голосов
/ 08 сентября 2011

Простой

variable_int=`$function '$arg1' '$arg2'`

без эвала не обойдется?

1 голос
/ 09 сентября 2011

Когда вы сталкиваетесь с такой проблемой, я обнаружил, что всегда очень полезно работать с опцией -x, просто измените верхнюю строку sh-bang следующим образом:каждая строка в том виде, в котором она в данный момент интерпретируется, перед ее выполнением.Вы можете увидеть, как ваши переменные искажаются и использовать это, чтобы решить проблему.

1 голос
/ 09 сентября 2011

Чтобы присвоить возвращаемые значения из функций переменной оболочки, используйте подстановку команд

variable=$(function arg1 arg2)

Зачем вам нужно eval?

...