Bash:让cat在变量中合并括号文件{}

时间:2018-08-15 20:35:42

标签: bash variables cat braces

问题:

cat可以读取括号{}中的多个文件;

cat {file1,file2}.txt

但是当变量指定括号部分时不是。

VAR="{file1,file2}"
cat $VAR.txt

我怀疑,引用为here的原因是,因为引号实际上是在变量中读取的。因此,cat试图找到不存在的{file1,file2}.txt

是否可以将多个文件指定为变量中的单个元素?

上下文:

对于我的完整脚本,我想循环cat到一组有括号和无括号的文件前缀。因此,简单地设置VAR=( file1 file2)对我没有帮助。

VAR=( "{file1,file2}" file3 file4 )
for i in ${VAR[@]}; do cat $i.txt > merged$i.txt; done

2 个答案:

答案 0 :(得分:3)

Brace expansion is the first thing bash does,因此您无法将其存储在变量中(除非您诉诸eval

使用数组时只需删除引号:

$ files=( file{1..4} )
$ declare -p files
declare -a files='([0]="file1" [1]="file2" [2]="file3" [3]="file4")'

然后

cat "${files[@]}" > merged

答案 1 :(得分:0)

您正在寻找eval吗?

VAR="{file1,file2}"
eval "cat $VAR.txt"