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
,但不是像你那样。也请阅读,链接是页面上的第一件事。