当我将“awk”放入 bash 脚本中时,为什么它会失败

当我将“awk”放入 bash 脚本中时,为什么它会失败

在提示符上:

ls | awk '{printf("%s\t\t%s\n", $9, $3);}'

成功打印了应该打印的内容。如果我把它放在一个文件中,我会得到四到五个空行(大约是 输出中的行数ls):

$ cat awk-file-owner-simple 
#!/bin/bash
ls | awk '{printf("%s\t\t%s\n", $9, $3);}'
$ ./awk-file-owner-simple 
_
_
_
_

其中_代表空行(无法使用 stackexchange 的代码格式化程序显示)。

答案1

改成。ls |ls -l |

您显然在 shell 中使用了别名lsls -l可能是函数和/或其他选项);用于type ls查看您实际执行的内容。脚本没有别名,因此它只是运行正常的ls,并具有单列输出。

答案2

或者使用 coreutils 包中的 stat(1)。

stat --printf="%-20n %U\n" *

相关内容