在 bash 大括号扩展中更改 separator/delim

Change separator/delim in bash brace expansion

前提

我意识到这个 question 已经存在,但解决方案实际上并没有改变分隔符。我想知道是否可以更改分隔符,或者是否有人知道它所在的位置。


例子

假设我需要将这个字符串传递给一个程序,用逗号分隔,因为这是程序接受的内容

echo \"abc" "{def,ghi}\"

打印

"abc def" "abc ghi"

我想要的地方

"abc def","abc ghi"

显然这只是一个简单的例子。


我试过的

没有,因为我不知道在哪里可以找到这个分隔符,尽管我已经进行了相当广泛的搜索

也作为子问题:

尝试使用 choroba 的另一个问题的答案将其传递到我的脚本时会产生错误。不可否认,我没有尝试过很长时间

我试过了

./script ( set abc" "{def,ghi} ; IFS=: ; echo "$*" )
./script < <( set abc" "{def,ghi} ; IFS=: ; echo "$*" )
./scipt $(( set abc" "{def,ghi} ; IFS=: ; echo "$*" ))

所以我的测试脚本如下所示:

#!/usr/bin/env bash

echo "$@"

它适用于:

./my_script.sh $(set \"abc\ {def,ghi}\"; IFS=,; echo "$*")

它输出:

"abc def","abc ghi"

我猜你错过了 $ 来调用子 shell。

已更新主要问题(是否有更改分隔符的选项):

查看 bash v4.3 来源后:

做的时候

./my_script.sh \"abc\ {1,2}\"

无法添加任何其他分隔符,因为没有分隔符。该命令获取传递给它的两个参数 "abc 1""abc 2".

个案

echo \"abc\ {1,2}\"

您需要扩展内置 echo 以具有选项或全局变量来设置单词分隔符。目前这是由 putchar(' ') in echo_builtin in builtins/echo.def:192

完成的