编辑: 我正在创建一个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”的变量中。
由于
答案 0 :(得分:2)
一个简单的
variable_int=`$function '$arg1' '$arg2'`
没有eval会不会这样做?
答案 1 :(得分:1)
要将函数的返回值赋值给shell变量,请使用命令替换
variable=$(function arg1 arg2)
为什么需要eval
?
答案 2 :(得分:1)
当遇到这样的问题时,我发现使用-x选项运行总是非常有用,只需更改顶部的sh-bang行:
#!/bin/bash -x
这将打印出之前解释的每一行 执行它。您可以看到变量是如何被破坏的,并使用它来解决问题。