linux - 在csh中提取字符串

标签 linux string shell csh

请您解释一下为什么以下 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/

相关文章:

linux - 如何在 Linux 内核模块中设置周期性定时器回调

linux - Jenkins 切换用户并执行命令

c# - 初始化多维字符串数组

c - 二维字符串数组

linux - 在自身内部过滤 shell 脚本输出,脚本不会终止

java - 更改 JAVA_HOME 以匹配您的环境 JAVA_HOME ="/opt/java"

linux - vmware 中的 Pyrit CPU 基准测试比主机上快得多

谁能解释一下这段C代码吗?

linux - 如何将特定列转换为标题大小写

python - 如何在Python中实现线程运行两个bash shell命令?