我的程序旨在将第一个参数作为扩展,然后是其余部分 参数作为要搜索的文件,如果找到,则由扩展名修改。如果找不到,则会输出错误。
一切都很棒,直到: ./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
谢谢!
答案 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引用的变量,或者至少是可行的。
我希望这有帮助。