bash命令输出为参数

bash命令输出为参数,bash,parameters,Bash,Parameters,假设命令alpha生成此输出: a b c d 如果我运行命令 beta $(alpha) beta "$(alpha)" 然后将使用四个参数执行beta,“a”,“b”,“c”和“d” 但是如果我运行命令 beta $(alpha) beta "$(alpha)" 然后,beta将使用一个参数执行,“a b c d” 为了使用两个参数执行beta,“abc”和“d”,我应该写些什么。也就是说,我如何强制$(alpha)从alpha每个输出行返回一个参数?脚本beta.sh应该解决您的

假设命令
alpha
生成此输出:

a b c
d
如果我运行命令

beta $(alpha)
beta "$(alpha)"
然后将使用四个参数执行
beta
“a”
“b”
“c”
“d”

但是如果我运行命令

beta $(alpha)
beta "$(alpha)"
然后,
beta
将使用一个参数执行,
“a b c d”


为了使用两个参数执行
beta
“abc”和
“d”
,我应该写些什么。也就是说,我如何强制
$(alpha)
alpha
每个输出行返回一个参数?

脚本beta.sh应该解决您的问题:

$ cat alpha.sh
#! /bin/sh
echo -e "a b c\nd"

$ cat beta.sh
#! /bin/sh
OIFS="$IFS"
IFS=$'\n'
for i in $(./alpha.sh); do
    echo $i
done
您可以使用:

$ alpha | xargs -d "\n" beta

bash
中分两步执行此操作:

IFS=$'\n' read -d '' a b < <(alpha)

beta "$a" "$b"

IFS=$'\n如果您使用的是
bash
4或更高版本,则读取-d'ab<类似于anubhava的答案

readarray -t args < <(alpha)
beta "${args[@]}"

readarray-t args<这也会使
/alpha.sh
的输出服从路径名生成,这可能是不可取的。@chepner。负一,为什么?这是一个简单的例子来说明如何解决这个问题,它是有效的。显然,alpha.sh可以在路径目录上,然后您可以避免“/”,但我想把注意力集中在解决问题上,而不是次要问题上……如果
alpha
可以输出类似
a*c
的行,那么它就不起作用了。这不是次要问题。请提供一个带有echo失败的示例字符串?我更喜欢测试它使用
IFS
,但不是像你那样。也请阅读,链接是页面上的第一件事。