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

埃尔帕夫洛斯

我正在尝试将在以下循环中创建的变量$ 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。它将所有相邻的值在没有行TAB的同一行中存储在数组MY_ARRAY中。

有什么帮助吗?

乔治·瓦西里乌(George Vasiliou)

是的,发生这种情况是因为$MY_ARRAY > MY_FILE.txt该命令无效。

您需要将阵列打印到文件中。

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

由人回声

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章