File 让foreach不拆分文件

File 让foreach不拆分文件,file,unix,foreach,shift,File,Unix,Foreach,Shift,我的程序设计为将第一个参数作为扩展,然后将其余参数作为扩展 参数作为要搜索的文件,如果找到,则由扩展名修改。如果未找到,则打印错误 一切都很好,直到: ./chExt.sh'com“眼镜王蛇.dat” 其中$file将这两个单词拆分为“king”和“cobra.dat”,然后分别运行它们。我需要将它作为一个整体读取到$file中的'king cobra.dat' 我听说了一些关于使用“shift”让它作为一个整体来阅读的内容,但我不知道如何实现它 #!/bin/csh

我的程序设计为将第一个参数作为扩展,然后将其余参数作为扩展 参数作为要搜索的文件,如果找到,则由扩展名修改。如果未找到,则打印错误

一切都很好,直到: ./chExt.sh'com“眼镜王蛇.dat”

其中$file将这两个单词拆分为“king”和“cobra.dat”,然后分别运行它们。我需要将它作为一个整体读取到$file中的'king cobra.dat'

我听说了一些关于使用“shift”让它作为一个整体来阅读的内容,但我不知道如何实现它

#!/bin/csh                                                                   \

set ext="$1"
shift

echo the remaining are $*
foreach file ($*)
echo $file
if (-r "$file") then
set newName=`echo "$file" | sed 's/\.[A-Za-z0-9]*$/'".$ext"'/g'`
echo $newName
if ( "$file" == "$newName" ) then
:
else
mv "$file" "$newName"
endif
end
else
echo "$file": No such file
end
endif

谢谢

Csh有一些独特的变量修饰符,请参见

对于你的情况,你可以这样做

foreach file ($*:q)
echo $file:q
if (-r $file:q) then
set newName=`echo $file:q | sed 's/\.[A-Za-z0-9]*$/'".$ext"'/g'`
echo $newName:q
 .....
不幸的是,我没有csh来测试这一点,您可能会发现返回一些dbl引用的变量是必需的,或者至少是可行的


我希望这能有所帮助。

Csh有一些独特的变量修饰符,请参阅

对于你的情况,你可以这样做

foreach file ($*:q)
echo $file:q
if (-r $file:q) then
set newName=`echo $file:q | sed 's/\.[A-Za-z0-9]*$/'".$ext"'/g'`
echo $newName:q
 .....
不幸的是,我没有csh来测试这一点,您可能会发现返回一些dbl引用的变量是必需的,或者至少是可行的


我希望这能有所帮助。

Joey,这看起来很像是你先前问题的翻版。作为作者,我认为你可以“取消”你未回答的问题,只是避免重复工作。我很高兴我的回答有帮助。我非常同意csh不是一个很好的长期脚本编写方法,请参阅《格里米尔评论》。(虽然由于我第一份工作的csh文化,我做了8年!)祝你好运!乔伊,这看起来很像是你上一个问题的翻版。作为作者,我认为你可以“取消”你未回答的问题,只是避免重复工作。我很高兴我的回答有帮助。我非常同意csh不是一个很好的长期脚本编写方法,请参阅《格里米尔评论》。(虽然由于我第一份工作的csh文化,我做了8年!)祝你好运!