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

Append contents of .txt file in bash variable

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

1003
1004
1005
1006
.
.
.
and so on

这些数字是文件夹路径的索引。例如

/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

但当然不行。有帮助吗?

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

您需要将值附加到您的变量:

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

PSvar="${var:+$var }" 将避免领先 space

将它们放入一个数组中:

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

您可以在 Bash.

中读取文件而无需调用外部程序 (cat)

在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/

那么如果你想要一个 space 分隔的字符串:

all_dirs=${var[*]}