我需要使用非标准分隔符打印参数的功能(与my_func() { echo "$@"; }
创建的空格相反)。像这样:
$ my_func foo bar baz
foo;bar;baz
参数的数量有所不同,我不需要尾随定界符。有什么想法吗?
答案 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配置。