我想将所有文件放入 bash 脚本中的一个新文件中。
例如,我的目录中有三个文件: - file_a.txt - file b.txt - file(c).txt
当我编写以下内容时,它可以正常工作:
cat "file"*".txt" >> out_file.bak
不,我想通过使用变量使其更加灵活/干净:
input_files="file"*".txt"
cat $input_files >> out_file.bak
不幸的是这不起作用。问题是为什么? (当我回显 input_files 并在终端中运行命令时,一切都很好。那么为什么它在 bash 脚本中不起作用?)
答案1
您在使用 的命令$
中缺少 a 。尝试cat
input_files
cat $input_files >> out_file.bak
答案2
这取决于您想何时进行扩展:
当您定义变量时:
$ files=$(echo a*)
$ echo $files
a1 a2 a3
$ echo "$files"
a1 a2 a3
当您访问变量时:
$ files=a*
$ echo "$files"
a*
$ echo $files
a1 a2 a3
答案3
如果文件名包含空格,则必须更加小心。在这种情况下,请使用数组:
input_files=( "file with space."*.txt )
cat "${input_files[@]}" >> out_file.bak