如何将变量从循环存储到文件

时间:2017-02-16 11:25:20

标签: arrays shell loops append

我正在尝试将以下循环中创建的变量$ 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的同一行中。

任何帮助?

1 个答案:

答案 0 :(得分:0)

是的,这是因为$MY_ARRAY > MY_FILE.txt不是有效的命令。

您需要将数组打印到文件中。

为了正确打印,您需要使用
echo -e "${MY_ARRAY[@]}" >fileprintf

通过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