在 bash 大括号扩展中更改分隔符/分隔符

123*_*123 3 bash brace-expansion

前提

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


例子

假设我需要将此字符串传递给程序,以逗号分隔,因为这是程序接受的

echo \"abc" "{def,ghi}\"
Run Code Online (Sandbox Code Playgroud)

印刷

"abc def" "abc ghi"
Run Code Online (Sandbox Code Playgroud)

我想要的地方

"abc def","abc ghi"
Run Code Online (Sandbox Code Playgroud)

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


我试过的

没有什么,因为我不知道在哪里寻找这个分隔符,尽管我已经进行了广泛的搜索

也作为一个子问题:

尝试使用 choroba 的另一个问题的答案将其传递给我的脚本时会产生错误。诚然,我还没有尝试过很长时间

我试过

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

Red*_*edX 5

所以我的测试脚本看起来像:

#!/usr/bin/env bash

echo "$@"
Run Code Online (Sandbox Code Playgroud)

它适用于:

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

它输出:

"abc def","abc ghi"
Run Code Online (Sandbox Code Playgroud)

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

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

在查看 bash v4.3 源代码后:

做的时候

./my_script.sh \"abc\ {1,2}\"
Run Code Online (Sandbox Code Playgroud)

由于没有分隔符,因此无法添加任何其他分隔符。该命令将两个参数传递给它"abc 1""abc 2"

的情况下

echo \"abc\ {1,2}\"
Run Code Online (Sandbox Code Playgroud)

您需要扩展内置 echo 以使用选项或全局变量来设置单词分隔符。目前,这是通过putchar(' ')echo_builtinbuiltins/echo.def:192