在变量中使用星号

在变量中使用星号

我想将所有文件放入 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 。尝试catinput_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

相关内容