需要帮助替换转义字符的双引号,请查找以下一行代码:
echo -e "nzsql -d $f1 -c" \"alter table $f3.$f2 ALTER COLUMN $f4 SET DEFAULT $v5\" 产出如下:
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN CD_ID SET DEFAULT '-9999' "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN LMT_ID SET DEFAULT 99' "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN PPN_TM SET DEFAULT "TIMESTAMP"('now(0)'::"VARCHAR") "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN SRC_STM_ID SET DEFAULT '-9999' "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN UNQ_ID_IN_SRC_STM SET DEFAULT 'MISSING_VALUE'::"NVARCHAR" "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN END_DT SET DEFAULT '9999/12/31' "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN EFF_DT SET DEFAULT '1900/01/01' "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN ISRT_RUN_ID SET DEFAULT '-9999' "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN UDT_RUN_ID SET DEFAULT '-9999' "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN UDT_RUN_ID SET DEFAULT -9999 "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN UDT_RUN_ID SET DEFAULT 9999 "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN UDT_RUN_ID SET DEFAULT Now() "
nzsql -d DD -c "alter table SCHEMA.DD ALTER COLUMN LAST_VRSN_F SET DEFAULT '1' "我使用上面的命令准备alter语句。
下面是V5值
'-9999'
'-9999'
"TIMESTAMP"('now(0)'::"VARCHAR")
'-9999'
'MISSING_VALUE'::"NVARCHAR"
'9999/12/31'
'1900/01/01'
'-9999'
'-9999'
9999
Now()
now(0)
'1'我只需要做的是,如果v5值有",那么就用\"替换它,如果它有单引号或没有引号,则其余的必须保持不变。
我试过了
v5=`sed $v5/"/\"`和
v5=`echo ${v5/"/\"/}`不起作用。
发布于 2020-08-19 10:44:29
试试这个:
v5="$(echo "$v5" | sed 's/"/\\"/g')"
# this is your original command without any changes
echo -e "nzsql -d $f1 -c" \"alter table $f3.$f2 ALTER COLUMN $f4 SET DEFAULT $v5\" 解释:
echo "$v5" | sed:sed用\"从STDIN;'s/"/\\"/:替代"读取$v5,但仅对line;g:中第一次出现的"应用替换行中的每一次"。如果使用bash4或更高版本,则可以省略echo。
v5="$(sed 's/"/\\"/g' <<<"$v5")"正如您在问题末尾提到的,您可以省略sed并使用本机bash的替代:
VAR="${VAR//\"/\\\"}"https://stackoverflow.com/questions/63483718
复制相似问题