当我制作此代码时:
ENDROW=""
while read ENDROW;
do
temp=${ENDROW##*#@;} field1=`printf '"%s"\n' "${temp%%#@;*}"
#Here the insert >> ${sqlfile}
并查看${sqlfile}
输出字段为空...似乎找到分隔符之间的字段的代码在找到第一个分隔符时完成,然后不再继续。为什么呢?
答案 0 :(得分:2)
根据你在评论中指出的输入:
$ cat file
#@
field1#@
field2#@
field3#@
field4#@
field5
这可行:
while read ENDROW
do
echo ${ENDROW%*#@}
done < file
也就是说,您的替换必须使用%
(从后面剥离......)而不是##
(从前面剥离......)。
$ 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 - How can I use parameter expansion? How can I get substrings? How can I get a file without its extension, or get just a file's extension?
- Shell Command Language - 2.6.2 Parameter Expansion