如果inner.sh是的话
#...
echo first
echo second
echo third
Run Code Online (Sandbox Code Playgroud)
而且outer.sh是
var=`./inner.sh`
# only wants to use "first"...
Run Code Online (Sandbox Code Playgroud)
如何var通过空格分割?
sam*_*hen 80
试试这个:
var=($(./inner.sh))
# And then test the array with:
echo ${var[0]}
echo ${var[1]}
echo ${var[2]}
Run Code Online (Sandbox Code Playgroud)
输出:
first
second
third
Run Code Online (Sandbox Code Playgroud)
说明:
var=(first second third).$(./inner.sh)运行该inner.sh脚本,它打印出来first,second和third在不同的行.由于我们没有将双引号括起来$(...),所以它们被集中在同一条线上,但是用空格分隔,所以你最终会看到它在前一个项目符号中的样子.gni*_*urf 37
不要忘记内置mapfile.在你的情况下,它绝对是最有效的:如果你想在一个数组中啜饮整个文件,其中的字段将是输出的行./inner.sh,
mapfile -t array < <(./inner.sh)
Run Code Online (Sandbox Code Playgroud)
然后你会有第一行${array[0]},等等......
有关此内置和所有可能选项的更多信息:
help mapfile
Run Code Online (Sandbox Code Playgroud)
如果你只需要调用变量中的第一行firstline,请执行
read -r firstline < <(./inner.sh)
Run Code Online (Sandbox Code Playgroud)
这些绝对是最有效的方式!
这个小基准将证明:
$ 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
Run Code Online (Sandbox Code Playgroud)
如果您只想要输出第一行的第一个单词(带空格分隔符)./inner.sh,则最有效的方法是
read firstword _ < <(./inner.sh)
Run Code Online (Sandbox Code Playgroud)
你不是在空白上分裂,而是在新行上分裂.给这个旋转:
IFS=$'
'
var=$(./echo.sh)
echo $var | awk '{ print $1 }'
unset IFS
Run Code Online (Sandbox Code Playgroud)