如果inner.sh
是
#...
echo first
echo second
echo third
outer.sh
是
var=`./inner.sh`
# only wants to use "first"...
如何用空格分割var
?
答案 0 :(得分:68)
试试这个:
var=($(./inner.sh))
# And then test the array with:
echo ${var[0]}
echo ${var[1]}
echo ${var[2]}
<强>输出:强>
first
second
third
<强>解释强>
var=(first second third)
在bash中创建数组。$(./inner.sh)
运行inner.sh
脚本,该脚本在不同的行上打印出first
,second
和third
。因为我们没有在$(...)
附近放置双引号,所以它们被集中在同一行上,但是用空格分隔,所以你最终会看到它在前一个项目符号中的样子。答案 1 :(得分:35)
不要忘记内置mapfile
。在你的情况下,它绝对是最有效的:如果你想在一个数组中啜饮整个文件,其中的字段将是./inner.sh
输出的行,那么
mapfile -t array < <(./inner.sh)
然后你会在${array[0]}
等第一行......
有关此内置和所有可能选项的更多信息:
help mapfile
如果您只需要名为firstline
的变量中的第一行,请执行
read -r firstline < <(./inner.sh)
这些绝对是最有效的方法!
这个小基准将证明:
$ time mapfile -t array < <(for i in {0..100000}; do echo "fdjsakfjds$i"; done)
real 0m1.514s
user 0m1.492s
sys 0m0.560s
$ time array=( $(for i in {0..100000}; do echo "fdjsakfjds$i"; done) )
real 0m2.045s
user 0m1.844s
sys 0m0.308s
如果您只想要./inner.sh
输出第一行的第一个单词(带空格分隔符),那么最有效的方法是
read firstword _ < <(./inner.sh)
答案 2 :(得分:5)
你不是在空格上分裂而是在换行符上。 给这个旋转:
IFS=$'
'
var=$(./echo.sh)
echo $var | awk '{ print $1 }'
unset IFS