4

前提

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


例子

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

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 "$*" ))
4

1 回答 1

6

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

#!/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_builtinin完成的builtins/echo.def:192

于 2015-06-17T12:51:05.220 回答