Shell脚本musn';t生成";额外的;错误消息,但仅适用于一个单独的测试用例

Shell脚本musn';t生成";额外的;错误消息,但仅适用于一个单独的测试用例,shell,unix,sed,Shell,Unix,Sed,我必须编写一个基本脚本,以以下形式接受输入: ./chext'param1''param2.xx' 和产出: param2.param1 具体地说,我必须检查文件是否存在,如果存在,则使用新扩展名重命名,如果不存在,则生成消息: param2.xx:没有这样的文件 具体地说,我被告知:“不应发出任何其他消息,包括来自脚本调用的命令的错误消息。” 这适用于以下示例: ./chext'com'aardvark.dat' 及 ./chext'ret'太常见了。exp' 但对于: ./chext'dat

我必须编写一个基本脚本,以以下形式接受输入:

./chext'param1''param2.xx'

和产出:

param2.param1

具体地说,我必须检查文件是否存在,如果存在,则使用新扩展名重命名,如果不存在,则生成消息:

param2.xx:没有这样的文件

具体地说,我被告知:“不应发出任何其他消息,包括来自脚本调用的命令的错误消息。”

这适用于以下示例:

./chext'com'aardvark.dat'

./chext'ret'太常见了。exp'

但对于:

./chext'dat'ocelot.dat'

我收到错误(由我的教授创建)“生成意外消息”

有谁能告诉我这个例子有什么不同,我的脚本没有考虑到

#!/bin/csh                                                                      
set ext="$1"
set oldName="$2"
if (-r "$oldName") then
set newName=`echo "$oldName" | sed 's/\.[A-Za-z0-9]*$/'".$ext"'/g'`
mv "$oldName" "$newName"
else
echo "$oldName": No such file
endif

谢谢

您不能将文件重命名为它已有的名称。

您知道我应该怎么做吗?您应该检查名称是否相同。即使扩展名使名称相同,它最初也不在我的相对路径中,因此它仍然应该给出我给出的正确错误消息。我不明白还有哪些“消息”正在生成。
$mv t.txt t.txt
mv:`t.txt'和`t.txt'是同一个文件
啊,有没有办法不打印这个错误或检查相似性,然后说“什么都不做”?我不确定要添加到脚本中的“什么都不做”的等价物是否能够满足检查要求。