【发布时间】:2018-12-05 00:33:09
【问题描述】:
我有一个任意字符串数组,例如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[@]}")
出于兴趣:有没有一种方法可以在不使用eval 的情况下处理替换a 的每个条目?请记住,a 的条目可以包含任何字符(\0 除外,因为bash 不支持它)。
【问题讨论】:
-
printf %s "$var1"和"$var1"几乎是等价的;这些只是更复杂命令的占位符吗? -
@chepner 也许我错了,但对我来说
printf似乎是必要的。这个问题中唯一的占位符是paste和a中的值。如果不是<(printf %s "$var1"),您将如何模拟与$var1具有相同内容的文件? -
哦,对了,您希望
$var1作为(伪)匿名文件的内容。
标签: arrays bash process-substitution