c shell 环境变量错误:“$ 中的错误:修饰符”

c shell 环境变量错误:“$ 中的错误:修饰符”

我正在使用 tcsh 并定义一个环境变量如下:

setenv mycomp [email protected]

因此,当我需要从远程 my.computer.com 复制文件时,我输入以下内容:

scp $mycomp:sourcepath destpath

但是当我这样做时,我收到以下错误:“错误:$(m)中的修饰符。”其中(m)是冒号后的第一个字符。

这个错误告诉我什么?我该如何修复它?

答案1

后面带有冒号的变量扩展将冒号后面的字母视为修饰符。

例如,表示用修饰符$dir:h扩展。 表示头部,即路径的最后一部分以外的所有内容。$dirhh

% set dir=/home/user
% echo $dir:h
/home

所有信息都在 tcsh(1) 手册页中:

History substitution

   ...

   The word or words in a history reference  can  be  edited,  or  ‘‘modi-
   fied’’,  by following it with one or more modifiers, each preceded by a
   ‘:’:

       h       Remove a trailing pathname component, leaving the head.
       t       Remove all leading pathname components, leaving the tail.
       r       Remove a filename extension ‘.xxx’, leaving the root  name.
       e       Remove all but the extension.
       u       Uppercase the first lowercase letter.
       l       Lowercase the first uppercase letter.
       s/l/r/  Substitute  l  for  r.
       ...


Variable substitution

   ...

   The ‘:’ modifiers described  under  History  substitution,  except  for
   ‘:p’,  can be applied to the substitutions above.

您可以通过将变量名括在括号中来避免使用修饰符,例如

scp ${mycomp}:sourcepath destpath

答案2

虽然我没有 tcsh 环境来测试这个,但我猜测当 shell 寻找你的环境变量时,它不会在 : 上分离并寻找 $mycomp:sourcepath 作为整个变量名。

我会尝试为您的 scp 命令添加别名。

相关内容