这是一个示例函数:
function example { echo "TextBefore $@ TextAfter" ; }
这是使用该功能的命令:
example A{1..5}B
输出:
TextBefore A1B A2B A3B A4B A5B TextAfter
我希望它是怎样的:
TextBefore A1B TextAfter
TextBefore A2B TextAfter
TextBefore A3B TextAfter
TextBefore A4B TextAfter
TextBefore A5B TextAfter
这就像我能形容的一样好。如果您理解它并知道更好的描述方式,请编辑问题。
如该示例所示,如何使序列中的每个 [在此处插入单词] 分别执行?
尝试这个:
使用
printf
而不是echo
. 该printf
实用程序将格式字符串作为其第一个参数(始终可以是单引号字符串),并且该字符串将包含其他参数的占位符:in 中的参数
"$@"
将插入到给定的位置%s
。由于格式字符串中只有一个%s
占位符,因此格式字符串将依次用于每个参数。这与printf
其他语言的工作方式不同。请注意,
printf
默认情况下不输出终止换行符。例子:
如果格式化字符串中有更多的占位符,这些将由给定的参数依次填充
printf
。如果还有更多参数可用,则在填充所有占位符后将重新使用格式化字符串。因此,您的功能可能看起来像
也可以看看:
虽然这两个答案都假设 OP 只想打印参数,但他们可能希望将括号中的参数传递给除or之外的其他命令。
echo
printf
外壳没有
mapcar
, etc[1] 所以唯一的方法是一个简单的循环(用cmd
实际命令替换占位符):作为旁注,在原始
echo "TextBefore $@ TextAfter"
中,当调用$@
设置为 aA1B
,A2B
, ...,A5B
时,传递给的单独参数echo
将TextBefore A1B
,A2B
, ...,A5B TextAfter
.$@
这是使用几乎没有意义的一种情况。[1] 有,但在这样一个简单的案例中,通过“陷阱和缺点”
xargs
导航是不值得的。xargs