Answers:
因为basename命令是在管道运行之前运行的。为了使这项工作有效,您需要xargs来执行basename,并且可以使用来实现sh -c,例如:
ls *.sh | xargs -L1 sh -c 'basename $1 .sh' dummy
笔记:
xargs在何处插入文件名,它们将被添加到命令行末尾。-L1开关或等效开关,因此xargs只能将一个参数传递给sh。ls可能会产生不良影响。删除了不推荐使用的选项,谢谢TechZilla
rename,例如:rename 's/\.sh//' *.sh。首先尝试空运行(-n)。
rename确实很好用,也很简单,但是请记住它是特定于发行版的。基于RHEL和Debian的发行版提供了不同的rename命令,因此在创建跨发行版脚本时必须牢记这一点。
-i选项是默认选项,但是那些“经典”选项已被弃用。例如,仅使用一个选项/行,新的POSIX手册页推荐使用-L1。要调用的旧行为-i,页面建议使用该-I'{}'选项。