Bash 函数:执行 $@ 命令,每个参数按顺序单独执行

nev*_*nd9 3 bash terminal seq

这是一个示例函数:

function example { echo "TextBefore $@ TextAfter" ; }
Run Code Online (Sandbox Code Playgroud)

这是使用该函数的命令:

example A{1..5}B
Run Code Online (Sandbox Code Playgroud)

输出:

TextBefore A1B A2B A3B A4B A5B TextAfter
Run Code Online (Sandbox Code Playgroud)

我希望它如何:

TextBefore A1B TextAfter
TextBefore A2B TextAfter
TextBefore A3B TextAfter
TextBefore A4B TextAfter
TextBefore A5B TextAfter
Run Code Online (Sandbox Code Playgroud)

这就像我能描述的那样好。如果您理解它并知道更好的描述方式,请编辑问题。

如该示例所示,如何使每个 [在此处插入单词] 单独执行?

Fre*_*ddy 11

尝试这个:

function example { printf 'TextBefore %s TextAfter\n' "$@"; }
Run Code Online (Sandbox Code Playgroud)


Kus*_*nda 5

使用printf而不是echo. 该printf实用程序采用格式字符串作为其第一个参数(它始终可以是单引号字符串),并且该字符串将包含其他参数的占位符:

printf 'TextBefore %s TextAfter\n' "$@"
Run Code Online (Sandbox Code Playgroud)

中的参数"$@"将被插入到 给出的位置%s。由于格式字符串中只有一个%s占位符,因此格式字符串将依次为每个参数重用。printf这与其他语言的工作方式不同。

请注意,printf默认情况下不输出终止换行符。

例子:

$ printf 'AAA %s BBB\n' 1 2 3 4 5
AAA 1 BBB
AAA 2 BBB
AAA 3 BBB
AAA 4 BBB
AAA 5 BBB
Run Code Online (Sandbox Code Playgroud)

如果格式化字符串中有更多占位符,这些占位符将由给定的参数依次填充printf。如果仍有更多可用参数,则在填充所有占位符后,将重用格式化字符串。

$ printf 'AAA %s %03d BBB\n' 1 2 3 4 5
AAA 1 002 BBB
AAA 3 004 BBB
AAA 5 000 BBB
Run Code Online (Sandbox Code Playgroud)

因此你的函数可能看起来像

printf 'TextBefore %s TextAfter\n' "$@"
Run Code Online (Sandbox Code Playgroud)

也可以看看: