我的剧本:
#!/bin/bash
for file in *.ats;
do
if [[ ("${file}" = THx) || ("${file}" = THy)]]
then cp $file /home/milenko/procmt
fi
done
Run Code Online (Sandbox Code Playgroud)
目录中的文件
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
Run Code Online (Sandbox Code Playgroud)
我想要的是复制包含THx或THy的文件,但不复制文件.为什么?
我想你可以完全避免循环:
cp *TH[xy]*.ats /home/milenko/procmt
Run Code Online (Sandbox Code Playgroud)
没有必要循环结果然后进行单独的比较; 单个glob将扩展到您想要的文件列表.
您的原始方法存在一些问题:
]]是复合命令中的关键字[[,因此它需要是一个单独的单词(即由空格包围).使用extglob进行扩展的globbing怎么样?这样您就可以使用for自身来获取所需的扩展:
shopt -s extglob
for file in *TH?(x|y)*.ats; do
# do things with "$file" ...
done
Run Code Online (Sandbox Code Playgroud)
*TH?(x|y)*.ats 扩展到包含的文件 <something> + TH + either x or y + <something> + .ats
您的脚本失败,因为您有一个拼写错误:
if [[ ("${file}" = THx) || ("${file}" = THy)]]
# ^
# missing space
Run Code Online (Sandbox Code Playgroud)
这可以:
$ d="hi"
$ [[ ($d == hi) || ($d == ha) ]] && echo "yes"
yes
Run Code Online (Sandbox Code Playgroud)
虽然括号是多余的:
$ [[ $d == hi || $d == ha ]] && echo "yes"
yes
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
456 次 |
| 最近记录: |