当我制作这段代码时:
ENDROW=""
while read ENDROW;
do
temp=${ENDROW##*#@;} field1=`printf '"%s"\n' "${temp%%#@;*}"
#Here the insert >> ${sqlfile}
并查看${sqlfile}
输出,该字段为空...似乎在找到第一个分隔符然后不继续时,查找分隔符之间的字段的代码已完成。为什么?
鉴于您在评论中指出的输入:
$ cat file
#@
field1#@
field2#@
field3#@
field4#@
field5
这可以工作:
while read ENDROW
do
echo ${ENDROW%*#@}
done < file
也就是说,您的替换必须使用%
(strip ... from back) 而不是##
(strip ... from front)。
$ while read ENDROW; do echo ${ENDROW%*#@}; done < file
field1
field2
field3
field4
field5
#ENDROW="" #is not necessary
while read ENDROW;
do
temp=${ENDROW%*#@}
field1=$(printf '"%s"\n' "$temp")
#Here the insert >> ${sqlfile}
要阅读有关 bash 替换的更多信息:
-wooledge.org-如何使用参数扩展?如何获取子字符串?如何获取没有扩展名的文件,或者只获取文件的扩展名?
- Shell 命令语言 - 2.6.2 参数扩展