为什么错误将变量标记为未定义?

Why is error flagging the variable as undefined?

我正在尝试运行整理我当前工作目录的部分文件名。这是我使用的代码:

set test = "$cwd" | awk -F "/" '{print }'
set USER_CUST = ${test:s/abc_//}

(说明:我要从根目录倒数第三个文件夹中删除"abc_"部分)

当我 运行 脚本 (script_check.csh) 时,我在我的控制台中得到了这个 :

tcsh -x script_check.csh
set test = /proj/proj_name/abc_username/folder/sub_folder
awk -F / {print }
test: Undefined variable.

为什么test是一个未定义的变量?还有其他可能的解决方法吗?

变量声明的右侧不是 shell 命令,因此您不能在其中使用管道。您可以通过以下方式查看:

$ set test = ls
$ echo $test
ls

为什么会出现令人困惑的 "undefined variable" 错误?谁知道。 (t)csh 解析器很古怪,充满了像这样的奇怪东西,尤其是在输入错误的情况下。这是通常不鼓励在 (t)csh 中编写脚本的主要原因之一(正如有人在评论中指出的那样);-)

要使其成为 shell 命令,请像这样添加反引号:

$ set test = `echo "$cwd" | awk -F "/" '{print }'`
$ echo $test
martin

顺便说一下,您可以使用 pwd 将其缩短一点:

$ set test = `pwd | awk -F "/" '{print }'`