现在这就是我正在做的事情
ret=$(ls -la | awk '{print $3 " " $9}')
usr=$(echo $ret | awk '{print $1}')
fil=$(echo $ret | awk '{print $2}')
问题是我没有运行ls
我正在运行一个需要时间的命令,因此您可以理解其逻辑。
有没有一种方法可以设置返回值来设置两个外部值,例如
ls -la | awk -r usr=x -r fil=y '{x=$3; y=$9}'
这样命令将运行一次,我可以将其最小化为一行
这并不漂亮,但如果您确实需要在一行中执行此操作,您可以使用awk
/bash
先进的元编程功能:)
eval $(ls -la | awk '{usr = $3 " " usr;fil = $9 " " fil} END{print "usr=\""usr"\";fil=\""fil"\""}')
打印:
echo -e $usr
echo -e $fil
就我个人而言,我会坚持使用你所拥有的 - 与上面相比,它更具可读性并且性能开销很小:
$time <three line approach>
real 0m0.017s
user 0m0.006s
sys 0m0.011s
$time <one line approach>
real 0m0.009s
user 0m0.004s
sys 0m0.007s
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)