打印函数参数由空格以外的分隔符分隔

时间:2018-10-17 15:06:56

标签: bash

我需要使用非标准分隔符打印参数的功能(与my_func() { echo "$@"; }创建的空格相反)。像这样:

$ my_func foo bar baz
foo;bar;baz

参数的数量有所不同,我不需要尾随定界符。有什么想法吗?

1 个答案:

答案 0 :(得分:8)

my_func() {
  local IFS=';'       # change the separator used by "$*", scoped to this function
  printf '%s\n' "$*"  # avoid reliability issues innate to echo
}

...或...

my_func() {
  local dest                 # declare dest local
  printf -v dest '%s;' "$@"  # populate it with arguments trailed by semicolons
  printf '%s\n' "${dest%;}"  # print the string with the last semicolon removed
}

关于“ echo固有的可靠性问题”,请参阅POSIX spec for echo的“应用程序使用”部分,并请注意,bash与该标准的一致性随{{3} }和compile-time配置。