gpt4 book ai didi

linux - 使用文字双引号从 bash 脚本生成文本

转载 作者:太空宇宙 更新时间:2023-11-04 09:21:42 25 4
gpt4 key购买 nike

我正在尝试为我的项目自动进行字符串替换...我需要在文件中这样输出

insert into libraries values("Schema_name",  "table_name",  "table_name",   "/data/Projects/Ope/ACT/Domain/Code/Files");

我在文件中得到的是

`insert into libraries values(Schema_name,  table_name,  table_name,   /data/Projects/Ope/ACT/Domain/Code/Files)`;

replace_script.sh

#!/bin/bash

while read line
do
param1=`echo $line | awk -F ' ' '{print $1}'`
param2=`echo $line | awk -F ' ' '{print $2}'`
echo "insert into libraries values(\"$param1\",\"$param2\",\"$param2\",\"/data/Projects/Ope/ACT/Domain/Code/Files\");" >> input_queries.hql
done <<EOF
schema_name table_name
schema_name table_name
EOF

最佳答案

您问题中给出的确切代码作为输出发出:

insert into libraries values("schema_name","table_name","table_name","/data/Projects/Ope/ACT/Domain/Code/Files");
insert into libraries values("schema_name","table_name","table_name","/data/Projects/Ope/ACT/Domain/Code/Files");

据我了解,这正是您声称想要的。


但是,SQL 不对数据使用双引号——它使用 引号。

escape_sql() {
local val
val=${1//\\/\\\\}
val=${val//\'/\\\'}
val=${val//\"/\\\"}
printf '%s' "$val"
}

while read -r param1 param2; do
printf $'insert into libraries values(\'%s\', \'%s\', \'%s\', \'/data/Projects/Ope/ACT/Domain/Code/Files\');\\n' \
"$(escape_sql "$param1")" \
"$(escape_sql "$param2")" \
"$(escape_sql "$param2")"
done <<EOF
schema_name table_name
schema_name table_name
EOF

上面的内容做了初步的尝试,以防止恶意值转义它们的引号——尽管为此目的,您确实应该为您的数据库使用一种具有 native SQL 绑定(bind)的语言!


也就是说——这安全地转义恶意数据(例如,包含文字引号的数据)。为此,请使用专为特定目的而构建的语言。

关于linux - 使用文字双引号从 bash 脚本生成文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41227744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com