我有分配到变量select语句的典型问题, 我尝试了很多选项,但没有一个可以使用..
我有替换上部(列名)的列名的函数。
Upper=(Column1 Column2) # Array variable
upper_function()
{
query="$1"
for ((i=0;i<${#Upper[@]};i++))
do
query=$(echo "$query" | sed -e "s/\b"${Upper[$i]}"\b/UPPER(${NAME[$i]})/g")
done
SQLQUERY="$query"
}
下面我有SQL语句:
SQLQUERY="Select column1,column2 from table"
现在,我想将column1和column2更改为
upper(column1) and upper(column2).
所以我运行函数:
upper_function "$SQLQUERY"
上面的解决方案工作正常,但情况是,而不是
SQLQUERY="$query"
我想让我的函数更自动,并将Select语句的名称分配给变量,例如如下所示:
$2="$query"
然后运行功能:
upper_function "$SQLQUERY" "SQLQUERY"
但它不起作用,我不知道为什么,如何正确分配该变量?感谢
答案 0 :(得分:1)
这是BashFAQ #6的核心。
printf -v
可用于现代(3.1+)版本的bash中的间接作业:
Upper=( column1 column2 ) # Array variable
upper_function() {
local colname query=$1 varname=$2
for colname in "${Upper[@]}"; do
query=$(echo "$query" | sed -e "s/\b"${colname}"\b/UPPER($colname})/g")
done
printf -v "$varname" %s "$query"
}
...此后:
upper_function "$SQLQUERY" SQLQUERY
在较旧的外壳上,而不是:
eval "$varname=\$query"
...请注意,您需要相信$varname
的值不是恶意的,因为注入该变量的代码将由该函数运行。因此,您永远不会想要使用文件名,表名或其他可能受攻击者控制的变量来命名以这种方式分配的变量。