我得到了一个数据库脚本,当给出某个身份证、姓氏和名字的时候,可以搜索重复的ID。以下是其核心代码:
PSQL="psql -p $PGPORT -h $DBHOST -d $DB -tAc "
DUP_ID=$($PSQL "SELECT id FROM inmate WHERE id NOT SIMILAR TO '(0*)${1}' AND lastname ILIKE '${_LNAME}' AND firstname ILIKE '${_FNAME}' LIMIT 1")
这段代码很好用,除非名字中有撇号,例如 "O'Neil"。我尝试使用 \ 转义每一次 ' 的出现,但是并没有成功。我已经花了一整天的时间在论坛上搜索,并尝试着使用不同的方法,但仍然无法在每个 ' 前面添加一个 \。
以下是目前的代码:
local _LNAME=`echo "${2}" | sed "s/'/\\\'/g"`
local _FNAME=`echo "${3}" | sed "s/'/\\\'/g"`
echo -e $_LNAME
echo -e $_FNAME
# Output
O'Neil
Robert
作为常规,提前感谢!
in="'"; out="\\'"; escaped_lname=${lname//$in/$out}
,这将比尝试使用 sed 玩游戏要快得多且更有效率。 - Charles Duffyecho -e
(像echo -n
一样)是非 POSIX 的,通常已被弃用;对于除了非常简单的echo
使用情况之外,printf
更受欢迎。如果您想以人类可读的方式显示变量的内容,则使用printf '%q\n' "$_lname"
将是更好的习惯 -- 它甚至可以以格式显示诸如换行符、回车符和其他不可打印字符,以便它们可以重新输入到 shell 中。 - Charles Duffy