如何在 bash shell 的 if 语句中使用 ls 命令的输出

pau*_*ith 3 bash shell

在继续处理该文件之前,我想检查是否只有一个文件实例存在。

我可以使用以下命令检查存在多少个实例:

ls -l $INPUT_DIR/${INPUT_FILE_PREFIX}cons*.csv.gz | wc -l;
Run Code Online (Sandbox Code Playgroud)

但是,当我在 if 语句中使用它时,会警告我ls: command not found.

if [ls -l $INPUT_DIR/${INPUT_FILE_PREFIX}cons*.csv.gz | wc -l = '1']
 then
 echo "Only 1 File Exists";
fi
Run Code Online (Sandbox Code Playgroud)

我尝试在 ls 命令的末尾添加一个分号并将其括在方括号中 - 这些都没有产生任何结果。

我很少需要编写任何 Shell 脚本,我怀疑这是一个非常基本的错误,因此非常感谢任何帮助。

Faz*_*lin 5

更改您的if条件如下:

if [ "$(ls -l $INPUT_DIR/${INPUT_FILE_PREFIX}cons*.csv.gz | wc -l)" = "1" ]
Run Code Online (Sandbox Code Playgroud)
  • [前后需要有一个空格]
  • 运行其中的命令$()将调用子shell 并运行该命令。
  • $()在双引号内放置将避免在空输出的情况下引发错误。

  • 在输出为空时过滤错误对我不起作用(使用旧的 MSYS bash 3,也许它只是 bash 4,如果是的话,指定它会很有用) (2认同)