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)
所以我的测试脚本看起来像:
#!/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_builtin中builtins/echo.def:192
| 归档时间: |
|
| 查看次数: |
2191 次 |
| 最近记录: |