我的 bash 脚本
#!/bin/bash
read -r -p "Enter the filenames: " -a arr
for i in "${arr[@]}"
do
echo $i | sed 's/\(.*\)\..*/\1/'
cp -v ~/Desktop/library/template.py "$i".py
done
如果我写A B.py C D.py
,这个脚本会把它变成解释正在做什么的A.py B.py C.py D.py
-v
标志cp -v
但我不想打印编辑后的文件名echo $i
。这很烦人。
我怎样才能做到这一点?
替代解决方案也受到赞赏
您想修剪
$i
字符串中最后一个点之后的值。你可以这样做:
这将删除
$i
与文件名通配模式匹配的最短后缀字符串.*
(点后跟任何字符串)。如果您知道要
.py
特别修剪:这意味着您可以
cp
像这样编写命令:这将是循环体中唯一的命令,如果值具有这样的后缀,它将
.py
从 中删除文件名后缀$i
,然后添加.py
. 这确保目标文件名始终具有.py
文件名后缀,同时避免后缀加倍。脚本建议:
或者,
...它使用
zsh
外壳,它的替代,更短的for
循环形式,以及它的修饰符在添加到名称:r
之前删除文件扩展名。.py
您可以像这样调用任一脚本:
我发现了一个窍门: