小编Old*_*Pro的帖子

在分词子shell输出时让bash尊重引号

我有一个命令,它输出一些我想传递给另一个命令的参数。但是,当我在子 shell 中运行命令时,输出会受到分词,除非我引用整个内容,在这种情况下,它是单个词。

我希望 subshel​​l 输出拆分单词,但我希望单词拆分尊重引号,但事实并非如此。有什么方法(除了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 …

bash bash-scripting

2
推荐指数
1
解决办法
596
查看次数

标签 统计

bash ×1

bash-scripting ×1