Jan*_*nis 11 unix-shell strings
是否有一种可移植的 unix shellscripting 方式将多个字符串与给定的分隔符连接在一起,如下所示:
$ strjoin --- foo bar baz quux
foo---bar---baz---quux
Run Code Online (Sandbox Code Playgroud)
当然我可以在 shellscript 函数中使用 $scripting_language 单行或丑陋的显式循环,但是老的 unix 黑客可能也有一些需要,所以有人做了这样一个我不知道的标准命令过去的某个地方,对吧?
编辑
该sed方法在许多情况下当然是最简单的方法,但如果字符串可以包含空格,则它不起作用。许多其他答案也没有处理这个问题。除了$IFS处理空格(以及一般所有可能的字符)并且不需要编写完整循环的技巧之外,还有其他解决方案吗?
ken*_*orb 14
对于多字符长分隔符,您可以使用:
$ echo foo bar baz quux | sed "s/ /---/g"
Run Code Online (Sandbox Code Playgroud)ex
$ echo foo bar baz quux | ex +"s/ /---/gp" -cq! /dev/stdin
$ ex +"s/ /---/gp" -scq! <(echo foo bar baz quux)
Run Code Online (Sandbox Code Playgroud)printf (但它会显示额外的结束分隔符)
$ printf "%s---" foo bar baz quux
Run Code Online (Sandbox Code Playgroud)使用以下 shell 函数(根据此SO 帖子):
join_by { local IFS="$1"; shift; echo "$*"; }
Run Code Online (Sandbox Code Playgroud)
用法:
$ join_by '---' foo bar baz quux
Run Code Online (Sandbox Code Playgroud)对于一个字符长的分隔符,您可以使用:
tr
echo foo bar baz quux | tr ' ' '-'
Run Code Online (Sandbox Code Playgroud)