如果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