简单while循环时的语法错误

时间:2014-12-25 02:17:01

标签: bash syntax

这个一般性问题已被多次询问,并且几乎总是存在明显的语法问题。但这似乎是正确的:

cat mixed_encoded.txt |
while read i do
type=${"$(echo "$i" | file -bi -)"#*=}
if [[ $type == 'iso-8859-1' ]]; then
    echo "$i" | iconv -f ISO-8859-1 -t UTF-8
else
    echo "$i"
fi
done > utf8_encoded.txt

给出

bash: syntax error near unexpected token `done'

是粘贴为多行还是单行模式。有或没有最终> utf8_encoded.txt。内部引号是否已转义。

可能出现什么问题?

1 个答案:

答案 0 :(得分:1)

cat mixed_encoded.txt |
while read i; do
type=${"$(echo "$i" | file -bi -)"#*=}
if [[ $type == 'iso-8859-1' ]]; then
    echo "$i" | iconv -f ISO-8859-1 -t UTF-8
else
    echo "$i"
fi
done > utf8_encoded.txt

你错过了一个分号。

这只会修复意外的done令牌。替换仍然很糟糕。

此修改修复了错误的替换:

cat mixed_encoded.txt |
while read i; do
type=$(echo "$i" | file -b --mime-encoding -)
if [[ $type == 'iso-8859-1' ]]; then
    echo "$i" | iconv -f ISO-8859-1 -t UTF-8
else
    echo "$i"
fi
done > utf8_encoded.txt