bash - 我的 shell 脚本中的逻辑或

标签 bash shell

我的脚本:

#!/bin/bash

for file in *.ats;
do
    if [[ ("${file}" = THx) || ("${file}" = THy)]]
    then cp $file /home/milenko/procmt
    fi
done

目录中的文件

262_V01_C00_R000_TEx_BL_128H.ats
262_V01_C01_R000_TEy_BL_128H.ats
262_V01_C02_R000_THx_BL_128H.ats
262_V01_C03_R000_THy_BL_128H.ats

我想要的是复制包含THx 或THy 的文件,但文件没有被复制。 为什么?

最佳答案

我认为你可以在这里完全避免循环:

cp *TH[xy]*.ats /home/milenko/procmt

无需循环遍历结果然后进行单独比较;单个 glob 将扩展为您想要的文件列表。

您原来的方法有几个问题:

  • 首先,您尝试测试完全匹配,因此条件永远不会为真。
  • 另外,注意空格:]]是复合命令[[中的关键字,所以它需要是一个单独的词(即被空格包围) .

关于bash - 我的 shell 脚本中的逻辑或,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39274067/

相关文章:

r - 在R中的文件路径中使用变量

bash - bash 无法接受用户输入

c - C 中的 Tee 函数调用不起作用而不是 tee 命令

linux - 用名称杀死随机进程

arrays - 将文件捕获到数组中并在 while 循环中使用该数组

linux - bash sort -g 用于 Ubuntu 14.04LTS 中的 x.xxe+x 格式数字

linux - Grep - 返回文件的行号和名称

linux - 通过 SSH 连接代理命令

c - 如何在C文件中运行shell命令并在变量中分配一个整数?

linux - 为什么 shell 逻辑不在 if 条件测试中表现不符合预期