我正在尝试将在以下循环中创建的变量$ 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中。
有什么帮助吗?
是的,发生这种情况是因为$MY_ARRAY > MY_FILE.txt
该命令无效。
您需要将阵列打印到文件中。
为了正确打印它,您需要使用
echo -e "${MY_ARRAY[@]}" >file
或printf
由人回声
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] 删除。
我来说两句