在 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
完成的
前提
我意识到这个 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