让foreach不拆分文件

时间:2012-04-20 19:23:34

标签: file unix foreach shift

我的程序旨在将第一个参数作为扩展,然后是其余部分 参数作为要搜索的文件,如果找到,则由扩展名修改。如果找不到,则会输出错误。

一切都很棒,直到:     ./chExt.sh'com''king cobra.dat'

其中$ file将这两个单词拆分为'king'和'cobra.dat'然后单独运行它们。我需要它作为一个整体'王cobra.dat'读入$ file。

我听说过使用“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

谢谢!

1 个答案:

答案 0 :(得分:1)

Csh有一些独特的变量修饰符,请参阅grymoire csh var :q (quote) modifier

对于你的情况,你可以做

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引用的变量,或者至少是可行的。

我希望这有帮助。