bash 使用特定分隔符分隔参数

bri*_*ore 1 linux bash shell makefile gnu-make

我正在搜索一个命令,该命令用特定的分隔符分隔所有给定的参数,并输出它们引用。

示例(分隔符设置为冒号:):

somecommand "this is" "a" test
Run Code Online (Sandbox Code Playgroud)

应该输出

"this is":"a":"test"
Run Code Online (Sandbox Code Playgroud)

我知道 shell 在将参数传递给命令之前会解释“”引号。因此,该命令实际上应该做的是打印出引号中的每个给定参数,并用冒号分隔所有这些参数。

我也不在寻找仅 bash 的解决方案,而是在寻找最优雅的解决方案。
循环遍历这些元素的数组并执行此操作非常容易,但问题是我必须在 a 中使用它,gnu makefile它只允许单行 shell 命令并使用sh而不是bash.

所以越简单越好。

Ben*_* W. 5

怎么样

somecommand () {
    printf '"%s"\n' "$@" | paste -s -d :
}
Run Code Online (Sandbox Code Playgroud)

用于printf添加引号并在单独的行上打印每个条目,然后paste-s("serial") 选项和冒号一起使用作为分隔符。

可以这样调用:

$ somecommand "this is" "a" test
"this is":"a":"test"
Run Code Online (Sandbox Code Playgroud)