请您解释一下为什么以下 shell 命令不起作用:
sh-3.1$ echo $MYPATH
/opt/Application/DATA/CROM/my_application
sh-3.1$ awk '{print substr($MYPATH,3)}'
谢谢 最好的问候
最佳答案
MYPATH
不会被 shell 替换,因为该字符串使用单引号。请考虑以下事项:
csh$ echo '{print substr($USER,3)}'
{print substr($USER,3)}
csh$ echo "{print substr($USER,3)}"
{print substr(dshawley,3)}
单 引号的使用指示 shell 按原样将字符串参数传递给程序。 双 引号告诉 shell 在将参数传递给程序之前对其执行变量扩展。这是 shell 和某些编程语言(例如 perl)中常见的基本 shell 功能。
您将要遇到的下一个问题是 awk
需要在 substr
的第一个参数周围加上引号,否则解析将失败。在这种情况下,您可能会看到“非法变量名”警告。这是我迷失了 csh
的地方,因为我不知道如何正确转义带引号的字符串中的双引号。在 bash/sh/ksh 中,您将执行以下操作:
sh$ awk "{print substr(\"$USER\",3)}"
input
^D
hawley
sh$
以防万一您还不知道这一点,awk
在执行任何操作之前需要一个输入流。对于这个小例子,我必须输入“input”和 EOF 字符。
关于linux - 在csh中提取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9736987/