Bash:eval和字符串“return”

时间:2011-09-08 15:33:07

标签: string bash eval return-value

编辑: 我正在创建一个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的“字符串引用”问题

然而我设法用eval执行$ 2

eval "$2"

并且效果很好,命令$ 2执行得很好。 但是,我不能在这种情况下使用eval,因为我想存储在“INSERT 0 1”的变量中。

由于

3 个答案:

答案 0 :(得分:2)

一个简单的

variable_int=`$function '$arg1' '$arg2'`
没有eval会不会这样做?

答案 1 :(得分:1)

要将函数的返回值赋值给shell变量,请使用命令替换

variable=$(function arg1 arg2)

为什么需要eval

答案 2 :(得分:1)

当遇到这样的问题时,我发现使用-x选项运行总是非常有用,只需更改顶部的sh-bang行:

#!/bin/bash -x

这将打印出之前解释的每一行 执行它。您可以看到变量是如何被破坏的,并使用它来解决问题。

相关问题