编辑:我正在创建一个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.comthread2423 这个应该可以用。
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"。
一个简单的
variable_int=`$function '$arg1' '$arg2'`
不加eval就不行了?
要将函数的返回值赋值给shell变量,可以使用命令代入
variable=$(function arg1 arg2)
你为什么要 eval
?
当你遇到这样的问题时,我发现用-x选项来运行总是非常有用的,只需像这样改变顶部的sh-bang行。
#!/bin/bash -x
这样就能在执行前打印出每一行当前的解释。你可以看到你的变量是如何被篡改的,然后用它来解决这个问题。