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
答案 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"