【问题标题】:awk in bash with ls and variablebash 中的 awk 与 ls 和变量
【发布时间】:2015-02-17 17:46:54
【问题描述】:

我只想打印特定目录的文件名: 这样就可以了:

ls -g  --sort=size -r /bin | awk '{print $8,$9,$10,$11,$12,$13}'

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

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

【问题讨论】:

    标签: bash awk ls


    【解决方案1】:

    这正是您不应该使用 UPPER_CASE_VARS 的原因。 $PATH 是一个variable used by the shell,用于在您的系统上查找可执行文件。一旦您用用户输入覆盖它,您的脚本就再也找不到任何不存在于输入中的任何内容。在本例中,您输入了/bin,因此您的脚本可以找到/bin/ls,但awk 不存在。

    command_not_found_handle(见 /etc/bash.bashrc)介入给你一个建议。

    【讨论】:

      【解决方案2】:

      应该是:

      ls -g  --sort=size -r ${PATH} | awk '{print $8,$9,$10,$11,$12,$13}'
      

      注意花括号。

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

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

      read my_path
      ls -g  --sort=size -r ${my_path} | awk '{print $8,$9,$10,$11,$12,$13}'
      

      【讨论】:

        猜你喜欢
        • 2020-09-09
        • 1970-01-01
        • 1970-01-01
        • 2016-01-01
        • 2021-08-22
        • 1970-01-01
        • 1970-01-01
        • 2013-11-19
        • 1970-01-01
        相关资源
        最近更新 更多