【问题标题】:Variable substitution in tcshtcsh 中的变量替换
【发布时间】:2014-09-04 13:56:52
【问题描述】:

我已经阅读了 tcsh 的手册,但仍然无法弄清楚它在我的情况下应该如何工作,或者它是否应该工作。我基本上需要提取其值为六位数的变量的一部分。所以我需要删除前两个字符并检索最后四个字符。

下面的例子不起作用(它可能在 bash 中起作用,但必须使用 tcsh):

set VAR1 = value1
set VAR2 = `echo ${VAR1:2}`
echo VAR2

它出现错误Bad : modifier in $ (2),显然是因为它是 bash 语法并且 tcsh 无法理解,但无法弄清楚如何使用 tcsh 参数来做到这一点。

【问题讨论】:

  • 欢迎来到stackoverflow。如果您觉得答案有帮助,请随时接受和/或投票。

标签: redhat tcsh


【解决方案1】:

我不确定是否使用修饰符,但您可以使用 cutsed 对字符串进行切片:

set VAR1=abcdef

“剪切”字符 3-to-end

echo $VAR1 | cut -c3-

捕获所有内容 (\(.*\)),前 2 个字符除外 (..)

echo $VAR1 | sed 's/..\(.*\)$/\1/'

【讨论】:

    【解决方案2】:

    您还可以将 perl 命令行与正则表达式一起使用,例如上面 @shx2 答案中的 sed:

    echo $VAR1 | perl -pe 's/^\d\d(.*)/$1/'
    

    删除开头的前两位数字。

    【讨论】:

      【解决方案3】:

      当然 tcsh 不接受 bash 样式的修饰符,反之亦然。它们是非常不同的外壳。

      您说您需要提取 6 位数字的最后 4 位数字。我假设这个数字是一个非负整数。

      如果您将其视为算术问题而不是字符串处理问题,则可以使用内置的@ 命令:

      % set VAR1 = 123456
      % @ VAR2 = $VAR1 % 10000
      % echo VAR1=$VAR1 VAR2=$VAR2
      VAR1=123456 VAR2=3456
      %
      

      (你为什么使用tcsh?必填链接:http://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-21
        • 2017-09-07
        • 1970-01-01
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多