目前这是我在做什么

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/

10-12 15:38