我有一个.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
但当然它不起作用。有什么帮助吗?
答案 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 }"
将避免领先空间