Arrays 在UNIX中使用数组将文件动态传递给命令

Arrays 在UNIX中使用数组将文件动态传递给命令,arrays,bash,unix,Arrays,Bash,Unix,我有四个文件(fileone到filefour),这些文件的内容并不重要。我想按数组定义的特定顺序将其中三个文件传递给命令(即粘贴或awk)。 我的数组是顺序=(二一四)。 我希望使用数组将所需文件作为输入传递给命令,就像使用*(即粘贴文件*>组合文件)一样 粘贴文件${order[@]}>组合文件 粘贴文件${order[@]}>组合文件 粘贴文件${order[*]}>组合文件 粘贴文件{${order[@]}}>组合文件 粘贴文件{{${order[@]}}>组合文件 我看了不同的页面(,

我有四个文件(
fileone
filefour
),这些文件的内容并不重要。我想按数组定义的特定顺序将其中三个文件传递给命令(即
粘贴
awk
)。 我的数组是
顺序=(二一四)
。 我希望使用数组将所需文件作为输入传递给命令,就像使用
*
(即
粘贴文件*>组合文件
)一样

粘贴文件${order[@]}>组合文件

粘贴文件${order[@]}>组合文件

粘贴文件${order[*]}>组合文件

粘贴文件{${order[@]}}>组合文件

粘贴文件{{${order[@]}}>组合文件

我看了不同的页面(,或),但我无法让它工作。在
粘贴
awk
的情况下,通过文件的
循环
不起作用。我想一次将所有文件传递给一个命令。鉴于我的
UNIX
知识有限,我可能误解了一些解决方案/答案。从我的理解来看,在
bash
中最初是如何开发数组的,可能存在一些问题

所需结果:
粘贴文件\u两个文件\u一个文件\u四个文件>组合文件

您可以在$()内使用for循环:


您可以使用
printf

paste $(printf "file_%s " ${order[@]}) > combined_file
这避免了必须循环遍历
顺序
数组的所有元素


或者,使用bashism,您可以使用:

paste ${order[@]/#/file_} > combined_file
请注意与bash手册页中提到的模式开头相匹配的
#

${parameter/pattern/string}

(…)如果模式以#开头,它必须 在参数展开值的开头匹配


执行
粘贴文件*>组合文件
应该可以。你犯了什么错误?我知道,但如果你读了我的问题陈述,那就不是我想要的了。我想要一个特定的订单,而不是所有的文件。我将删除该选项以避免混淆。请看我想要的结果:)我想你的意思是
文件\u$i
而不是
粘贴\u$i
。但无论如何,谢谢你,这是我想要的。是的,你是对的-真的必须停止在我的手机上回答这些问题!!太棒了,真管用!尽管对于第二个解决方案,如果数组为空或不存在,它似乎会挂起。我使用了错误的数组,似乎要花很长时间才能执行
CRTL+C
操作。我喜欢不在阵列中循环的解决方案。因此,我选择这个作为答案。
paste ${order[@]/#/file_} > combined_file