我在ZSH中有这个测试变量:
test_str='echo "a \" b c"'
Run Code Online (Sandbox Code Playgroud)
我想把它解析成两个字符串的数组("echo" "a \" b c").
即读取test_strshell本身会给我一些参数.
请注意,我不打算拆分白色空间或类似的东西.这实际上是将任意复杂的字符串解析为shell参数.
Zsh有(z)修饰符:
ARGS=( ${(z)test_str} )
Run Code Online (Sandbox Code Playgroud)
.但这将产生,echo并且"a \" b c"它不会取消引用字符串.要取消引用,您必须使用Q修饰符:
ARGS=( ${(Q)${(z)test_str}} )
Run Code Online (Sandbox Code Playgroud)
:导致拥有echo和a " b c在$ARGS数组中.无论是将在执行代码或…$(…),但(z)会分裂$(false true)成一个参数.
也就是说:
% testfoo=${(z):-'blah $(false true)'}; echo $testfoo[2]
$(false true)
Run Code Online (Sandbox Code Playgroud)
问题的措辞暗示了一个更简单的(?)答案.要设置shell参数,请使用set:
#!/bin/sh
test_str='echo "a \" b"'
eval set $test_str
for i; do echo $i; done
Run Code Online (Sandbox Code Playgroud)
这台$1以echo及$2对a " b. eval肯定有风险,但这是便携式的sh.当然,它不会分配给数组,但您可以$@以正常方式使用.
| 归档时间: |
|
| 查看次数: |
1034 次 |
| 最近记录: |