【发布时间】:2018-11-06 23:22:15
【问题描述】:
我想知道为什么 Bash 中的这个数组表达式没有给我一个数组。它只是给了我字符串中的第一个元素:
IFS='\n' read -r -a POSSIBLE_ENCODINGS <<< $(iconv -l)
我想尝试所有可用的编码,看看如何为 R 中的脚本读取不同的文件编码,我正在使用这个 Bash 脚本来创建具有所有可能编码的文本文件:
#!/bin/bash
IFS='\n' read -r -a POSSIBLE_ENCODINGS <<< $(iconv -l)
echo "${POSSIBLE_ENCODINGS[@]}"
for CURRENT_ENCODING in "${POSSIBLE_ENCODINGS[@]}"
do
TRIMMED=$(echo $CURRENT_ENCODING | sed 's:/*$::')
iconv --verbose --from-code=UTF-8 --to-code="$TRIMMED" --output=encoded-${TRIMMED}.txt first_file.txt
echo "Current encoding: ${TRIMMED}"
echo "Output file:encoded-${TRIMMED}.txt"
done
编辑:根据以下答案编辑代码:
#!/bin/bash
readarray -t possibleEncodings <<< "$(iconv -l)"
echo "${possibleEncodings[@]}"
for currentEncoding in "${possibleEncodings[@]}"
do
trimmedEncoding=$(echo $currentEncoding | sed 's:/*$::')
echo "Trimmed encoding: ${trimmedEncoding}"
iconv --verbose --from-code=UTF-8 --to-code="$trimmedEncoding" --output=encoded-${trimmedEncoding}.txt first_file.txt
echo "Current encoding: ${trimmedEncoding}"
echo "Output file:encoded-${trimmedEncoding}.txt"
done
【问题讨论】:
-
IFS='\n'表示字段由反斜杠或“n”分隔,而不是换行符。你可以改用IFS=$'\n'。