目前这是我在做什么
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}'
这样,该命令将运行一次,我可以将其最小化为一行
最佳答案
使用read
的解决方法
usr=""
fil=""
while read u f; do usr="$usr\n$u"; fil="$fil\n$f"; done < <(ls -la | awk '{print $3 " " $9}')
对于性能问题,您可以使用
<<<
,但是如果返回的文本很大,请避免使用它:while read u f; do usr="$usr\n$u"; fil="$fil\n$f"; done <<< $(ls -la | awk '{print $3 " " $9}')
来自@WilliamPursell的答案启发了一种更可移植的方式:
$ usr=""
$ fil=""
$ while read u f; do usr="$usr\n$u"; fil="$fil\n$f"; done << EOF
> $(ls -la | awk '{print $3 " " $9}')
> EOF
关于bash - 在awk中返回两个变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9001668/