带有 ls 和变量的 bash 中的 awk

rod*_*odi 0 bash awk ls

我只想打印特定目录的文件名:以这种方式工作:

ls -g  --sort=size -r /bin | awk '{print $8,$9,$10,$11,$12,$13}'
Run Code Online (Sandbox Code Playgroud)

但如果我读取路径变量它不起作用:

read PATH
ls -g  --sort=size -r $(PATH) | awk '{print $8,$9,$10,$11,$12,$13}'
Command 'awk' is available in '/usr/bin/awk'
Run Code Online (Sandbox Code Playgroud)

P.P*_*.P. 5

它应该是:

ls -g  --sort=size -r ${PATH} | awk '{print $8,$9,$10,$11,$12,$13}'
Run Code Online (Sandbox Code Playgroud)

注意花括号。

使用$(..),它将执行名为的命令/函数PATH并替换结果,这不是您想要的。

请注意,这PATH对于变量名来说是一个糟糕的选择,因为它将覆盖同名的系统变量并使系统命令不可用(因为原始变量PATH现在已经消失了)。我建议您使用其他名称,例如my_path

read my_path
ls -g  --sort=size -r ${my_path} | awk '{print $8,$9,$10,$11,$12,$13}'
Run Code Online (Sandbox Code Playgroud)


gle*_*man 5

这正是您不应该使用 UPPER_CASE_VARS 的原因。$PATH 是shell用来在系统上查找可执行文件的变量。一旦您用用户输入覆盖它,您的脚本就无法再找到任何不在输入中的内容。在本例中,您输入了/bin,因此您的脚本可以找到/bin/lsawk不存在。

command_not_found_handle(见/etc/bash.bashrc)在加强,给你一个建议。