在bash变量中追加.txt文件的内容

时间:2015-03-02 15:55:00

标签: bash variables

我有一个.txt文件,其内容有以下形式:

1003
1004
1005
1006
.
.
.
and so on

这些数字是文件夹路径的索引。 e.g

/Users/My_user/1003/files/
/Users/My_user/1004/files/
and so on

我想将不同的路径分配给bash变量,如:

var = '/Users/My_user/1003/files/ /Users/My_user/1004/files/ /Users/My_user/1005/files/ (and so on)' 

直到现在我尝试过这样的事情:

for index in $(cat the_text.txt);
do
var = '/Users/My_user/$index/files'
done

但当然它不起作用。有什么帮助吗?

4 个答案:

答案 0 :(得分:4)

将它们放入数组中:

DIRPATHS=();
while read -r index;
do
   DIRPATHS+=("/Users/My_user/$index/files/");
done < indices.txt

您可以在Bash中调用文件而无需调用外部程序(cat)。

答案 1 :(得分:2)

在bash中,这可以在没有循环的情况下完成:

$ cat the_text.txt
1003
1004
1005
1006
$ prefix="/Users/my_user/"
$ suffix="/files/"
$ mapfile -t var < the_text.txt
$ var=( "${var[@]/#/$prefix}" )
$ var=( "${var[@]/%/$suffix}" )
$ printf "%s\n" "${var[@]}"
/Users/my_user/1003/files/
/Users/my_user/1004/files/
/Users/my_user/1005/files/
/Users/my_user/1006/files/

然后,如果你想要一个以空格分隔的字符串:

all_dirs=${var[*]}

答案 2 :(得分:0)

for循环中的行更改为var="$var /Users/My_user/$index/files"会有效吗?

答案 3 :(得分:0)

您需要将值附加到变量:

for index in $(cat the_text.txt);
do
var="${var:+$var }/Users/My_user/$index/files"
done

<强> PS 即可。 var="${var:+$var }"将避免领先空间