-2

当我制作这段代码时:

ENDROW=""
while read ENDROW;
do
temp=${ENDROW##*#@;}          field1=`printf '"%s"\n' "${temp%%#@;*}"
#Here the insert >> ${sqlfile}

并查看${sqlfile}输出,该字段为空...似乎在找到第一个分隔符然后不继续时,查找分隔符之间的字段的代码已完成。为什么?

4

1 回答 1

2

鉴于您在评论中指出的输入:

$ 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 参数扩展

于 2013-06-03T08:33:05.960 回答