我正在尝试将以下循环中创建的变量$ d,$ tf_name,$ db_orig存储到文件中。我希望最终得到一个分隔符MY_FILE.txt,其中包含以下字段$ d,$ tf_name,$ db_orig和这组变量的每次迭代都存储在文件MY_FILE.txt中的新行中。
MY_ARRAY=()
for d in */
do
IN=$d
folderIN=(${IN//_/ })
tf_name=${folderIN[-1]%/*}
db_orig=${folderIN[-2]%/*};
ENTRY="$d\t$tf\t$id\t$db_orig\n"
MY_ARRAY+=$ENTRY
done
$MY_ARRAY > MY_FILE.txt
它不能分别将\ t和\ n识别为TAB和NEWLINE。它将所有值彼此相邻地存储在数组MY_ARRAY中的没有TAB的同一行中。
任何帮助?
答案 0 :(得分:0)
是的,这是因为$MY_ARRAY > MY_FILE.txt
不是有效的命令。
您需要将数组打印到文件中。
为了正确打印,您需要使用
echo -e "${MY_ARRAY[@]}" >file
或printf
通过man echo
echo -e : enable interpretation of backslash escapes
此外,如果您需要将$ ENTRY存储到您的阵列,您需要这样做:
MY_ARRAY+=("$ENTRY")
无论如何,你可以在不需要数组的情况下完成它。您只需在ENTRY中应用+ =:ENTRY+="$d\t$tf\t$id\t$db_orig\n"
测试:
$ e+="a\tb\tc\td\n"
$ e+="aa\tbb\tcc\tdd\n"
$ e+="aaa\tbbb\tccc\tddd\n"
$ echo -e "$e"
a b c d
aa bb cc dd
aaa bbb ccc ddd
# Test with array
$ e="a\tb\tc\td\n" && myar+=("$e")
$ e="aa\tbb\tcc\tdd\n" && myar+=("$e")
$ e="aaa\tbbb\tccc\tddd\n" && myar+=("$e")
$ echo -e "${myar[@]}"
a b c d
aa bb cc dd
aaa bbb ccc ddd
#Alternative array printing
$ for i in "${myar[@]}";do echo -en "$i";done
a b c d
aa bb cc dd