如果inner.sh
是
#...
echo first
echo second
echo third
并且outer.sh
是
var=`./inner.sh`
# only wants to use "first"...
如何var
用空格分割?
如果inner.sh
是
#...
echo first
echo second
echo third
并且outer.sh
是
var=`./inner.sh`
# only wants to use "first"...
如何var
用空格分割?
试试这个:
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)
。$(./inner.sh)
运行脚本,该脚本在单独的行上inner.sh
打印出first
、second
和。third
由于我们没有在 周围加上双引号$(...)
,因此它们会集中在同一行,但用空格分隔,因此您最终会得到上一个要点中的样子。不要忘记内置的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)
您不是在空格上拆分,而是在换行符上拆分。试一试:
IFS=$'
'
var=$(./echo.sh)
echo $var | awk '{ print $1 }'
unset IFS