【发布时间】:2019-01-22 18:20:42
【问题描述】:
问题:
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
【问题讨论】:
-
还要注意
echo file{1,2,3}将始终返回file1 file2 file3,而不管这些文件是否真的存在... -
@glenn jackman:谢谢。我已编辑我的帖子以删除引号。
-
VAR=( {file1,file2} file3 file4 )可以正常工作。为什么要引用这些字符串? -
顺便说一句,它应该是
for i in "${VAR[@]}"; do cat "$i.txt" > "merged$i.txt"; done——如果您想对所有可能的文件名、IFS 值等进行正确操作,则引号不是可选的。 -
我引用了字符串以得到
{file1,file2}作为for in ${VAR[@]}; do echo $i; done的输出。我希望cat在循环的一次迭代中读取和合并这两个文件。