【问题标题】:Using the result of a Unix Command as Integer?使用 Unix 命令的结果作为整数?
【发布时间】:2019-06-29 13:54:25
【问题描述】:

我正在 cshell 程序中编写代码,如果目录中有多种类型的文件,我想执行一些操作。

我尝试过这样的事情:

if "$(find . -name '*_type1.DAT' | wc -l)"  >1 then 
        echo "TRUE"
else echo "FALSE"
endif

在哪里找到 . -name 命令与 wc -l 一起计算我有多少个以 _type1.DAT 文件结尾的文件。我希望这部分,用作整数,比较它,如果有超过 1,做一些动作。

有人知道这是否可能,或者有更好的想法来制作这个条件语句吗?

【问题讨论】:

  • 我建议not using cshell 编写您的脚本。顺便说一句,您在我删除的答案中提到的错误可能是尝试使用$(...)-style 命令替换的结果,这不是csh 支持的AFAIK。您需要改用反引号。 ("`find . -name '*_type.DAT' | wc -l`")
  • 我不认为"$(find ... 是有效的 csh 语法。当您尝试运行代码时,您不会收到有关非法变量名的错误吗?

标签: shell unix csh


【解决方案1】:

如果可以避免,don't use csh。如果这是一个遗留代码,你应该使用类似的东西:

if ( `find . -name '*_type1.DAT' -printf "x\n" | head -2 | wc -l`  > 1) then 
        echo "TRUE"
else 
        echo "FALSE"
endif

说明:

  • `xyz` 执行 xyz 命令,并将输出捕获到字符串中。这与两个 bash 替代方案 `xyz` 和 $(xyz) 相同。
  • -printf "x\n" 确保每个条目只打印一行。即使某些文件名包含换行符,这也会打印一行。
  • 如果有很多 "*_type1.DAT" 文件,head -2 将强制 find 提前退出。这是不完美的,find 可能会在注意到其标准输出已关闭之前继续处理很多行。

【讨论】:

    猜你喜欢
    • 2012-06-07
    • 1970-01-01
    • 2010-09-08
    • 2014-04-17
    • 1970-01-01
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多