Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么脚本不能识别文件扩展名?_Linux_Bash_Shell - Fatal编程技术网

Linux 为什么脚本不能识别文件扩展名?

Linux 为什么脚本不能识别文件扩展名?,linux,bash,shell,Linux,Bash,Shell,我的剧本 #!/bin/bash cp *.ats /home/milenko/procmt mycd() { cd /home/milenko/procmt } mycd EXT=ats for i in *; do if [ "${i}" != "${i%.${EXT}}" ];then ./tsmp -ascii i fi done 但是 当我转到procmt目录并列出文件时 milenko@milenko-HP-Compaq-6830s:~/

我的剧本

#!/bin/bash

cp *.ats /home/milenko/procmt

mycd() {
  cd /home/milenko/procmt
}

mycd

EXT=ats
for i in *; do
    if [ "${i}" != "${i%.${EXT}}" ];then
        ./tsmp -ascii i
    fi
done
但是

当我转到procmt目录并列出文件时

milenko@milenko-HP-Compaq-6830s:~/procmt$ ls *.ats
262_V01_C00_R000_TEx_BL_2048H.ats  262_V01_C00_R086_TEx_BL_4096H.ats  262_V01_C02_R000_THx_BL_2048H.ats
262_V01_C00_R000_TEx_BL_4096H.ats  262_V01_C01_R000_TEy_BL_2048H.ats  262_V01_C03_R000_THy_BL_2048H.ats

我的脚本有什么问题?

如果我理解正确,这应该适合您:

dest='/home/milenko/procmt'

cp *.ats "$dest"

cd "$dest"

for i in *.ats; do
     ./tsmp -ascii "$i"
done

当您只对
.ats
文件感兴趣时,无需循环浏览所有文件。您的
mycd
功能只是执行
cd
,因此您也可以避免这种情况。

如果我理解正确,这应该适用于您:

dest='/home/milenko/procmt'

cp *.ats "$dest"

cd "$dest"

for i in *.ats; do
     ./tsmp -ascii "$i"
done

当您只对
.ats
文件感兴趣时,无需循环浏览所有文件。您的
mycd
函数只是执行
cd
,因此您也可以避免这种情况。

/tsmp-ascii
不是
/tsmp-ascii“$i”
;您根本没有扩展变量,因此总是将它作为文件名
i
i
不是以
.ats
结尾的字符串,因此,这是您的错误。
/tsmp-ascii
不是
/tsmp-ascii“$i”
;您根本没有扩展变量,因此总是将它作为文件名
i
i
不是以
.ats
结尾的字符串,因此,这是您的错误。可能会在
cd上退出
,正如展示良好实践一样——如果由于任何原因未能cd到
/home/milenko/procmt
,我们不想尝试运行一堆
/tsmp
命令。@CharlesDuffy:是的,这是一个很好的观点,但我认为
cp
将在
cd
之前失败,如果用户对给定路径有权限问题。@anubhava,好的一点——尽管我注意到如果
cp
也失败了,我们也不会退出。(这可能没问题——也许我们希望处理已经存在的文件,即使当前工作目录中没有与glob匹配的文件;相反,如果
cd
失败,我看不到继续的情况是完全正确的)。可能
|退出
cd
,正如展示良好实践一样——如果由于任何原因未能cd到
/home/milenko/procmt
,我们不想尝试运行一堆
/tsmp
命令。@CharlesDuffy:是的,这是一个很好的观点,但我认为
cp
将在
cd
之前失败,如果用户对给定路径有权限问题。@anubhava,好的一点——尽管我注意到如果
cp
也失败了,我们也不会退出。(这可能没问题——也许我们希望处理已经存在的文件,即使当前工作目录中没有与glob匹配的文件;相反,如果
cd
失败,我看不到继续的情况是完全正确的)。