我有一个命令,它输出一些我想传递给另一个命令的参数。但是,当我在子 shell 中运行命令时,输出会受到分词,除非我引用整个内容,在这种情况下,它是单个词。
我希望 subshell 输出拆分单词,但我希望单词拆分尊重引号,但事实并非如此。有什么方法(除了eval)可以将子shell输出拆分为单词但尊重引号?
鉴于args命令定义为
#!/bin/sh -
printf "%d args:" "$#"
printf " <%s>" "$@"
echo
Run Code Online (Sandbox Code Playgroud)
我可以跑
$ args 'foo bar' 'one two'
2 args: <foo bar> <one two>
Run Code Online (Sandbox Code Playgroud)
但我找不到一种方法让子shell 传递 2 个参数。
$ echo "\"'foo bar'\" 'one two'"
"'foo bar'" 'one two'
$ args $(echo "\"'foo bar'\" 'one two'")
4 args: <"'foo> <bar'"> <'one> <two'>
$ args "$(echo "\"'foo bar'\" 'one two'")"
1 args: <"'foo bar'" 'one two'>
Run Code Online (Sandbox Code Playgroud)
当然,我可以使用 eval …