我试图将在下面的循环中创建的变量$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。
有什么帮助吗?
发布于 2017-02-16 11:58:44
是的,这是因为$MY_ARRAY > MY_FILE.txt不是有效的命令。
您需要将数组打印到文件中。
为了正确地打印它,您需要使用
echo -e "${MY_ARRAY[@]}" >file或printf
由人回音
echo -e : enable interpretation of backslash escapes此外,如果需要将$ENTRY存储到数组中,则需要这样做:
MY_ARRAY+=("$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 ddhttps://stackoverflow.com/questions/42272586
复制相似问题