这个一般性问题已被多次询问,并且几乎总是存在明显的语法问题。但这似乎是正确的:
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
。内部引号是否已转义。
可能出现什么问题?
答案 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