我有一个任意字符串的数组,例如 a=(1st "2nd string" $'3rd\nstring\n' ...)
。
我想将这些字符串传递给一个解释其参数为文件的命令,例如 paste
。
对于固定数量的变量,我们可以使用进程替换。
paste <(printf %s "$var1") <(printf %s "$var2") <(printf %s "$var3")
但是只有在变量数量预先知道的情况下,才能使用这种方法。
对于数组a
,我们可以编写一些相对安全的代码,例如:
eval paste $(printf '<(printf %%s %q) ' "${a[@]}")
感兴趣的是:有没有一种方法可以处理替换a的每个条目,而不使用eval?请记住,a的条目可以包含任何字符(除了\0,因为bash不支持它)。
printf %s "$var1"
和"$var1"
在实际上是等价的,这些只是更复杂命令的占位符吗? - chepnerprintf
似乎是必要的。这个问题中唯一的占位符是paste
和a
内部的值。如果不用<(printf %s "$var1")
,你会如何模拟一个与$ var1
内容相同的文件? - Socowi$var1
作为(伪)匿名文件的内容。 - chepner