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

时间:2017-05-11 11:28:52

标签: awk tcsh

我试图截断当前工作目录的文件名的一部分。这是我正在使用的代码:

set test = "$cwd" | awk -F "/" '{print $3}'
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 $3}
test: Undefined variable.

为什么测试未定义的变量?还有其他可能的解决方法吗?

1 个答案:

答案 0 :(得分:1)

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

$ set test = ls
$ echo $test
ls

为什么会出现令人困惑的“未定义变量”错误?谁知道。 (t)csh解析器是古怪的,充满了像这样的奇怪的东西,特别是当给出错误的输入时。这是(t)csh中脚本编写通常不鼓励的主要原因之一(正如有人在评论中指出的那样); - )

要使它成为shell命令,请添加反引号,如下所示:

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

顺便说一句,您可以使用pwd缩短一点:

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