评价和字符串 "返回"

问题描述 投票:1回答:3

编辑:我正在创建一个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"。

string bash eval return-value
3个回答
2
投票

一个简单的

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

不加eval就不行了?


1
投票

要将函数的返回值赋值给shell变量,可以使用命令代入

variable=$(function arg1 arg2)

你为什么要 eval?


1
投票

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

#!/bin/bash -x

这样就能在执行前打印出每一行当前的解释。你可以看到你的变量是如何被篡改的,然后用它来解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.