我试图截断当前工作目录的文件名的一部分。这是我正在使用的代码:
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.
为什么测试未定义的变量?还有其他可能的解决方法吗?
答案 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}'`