1

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

一切都很好,直到:./chExt.sh 'com' 'king cobra.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

谢谢!

4

1 回答 1

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

我希望这有帮助。

于 2012-04-21T02:32:58.717 回答