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

Awk 为什么错误将变量标记为未定义?,awk,tcsh,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/fol

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

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.

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

变量声明的右后侧不是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}'`

试试
set test=`echo“$cwd”| awk-F”/“{print$3}`
…你需要
$4
而不是
$3
不要写[t]csh脚本,它不是为什么而设计的,所以它非常糟糕(谷歌)。这不是我个人的选择。被强迫的手。加上这里,它只是一个两行脚本。