tcsh中的变量替换

时间:2014-09-04 13:56:53

标签: redhat tcsh

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

下面的示例不起作用(它可能在bash中有效但是要使用tcsh):

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

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

3 个答案:

答案 0 :(得分:1)

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

set VAR1=abcdef

“剪切”字符3到结尾

echo $VAR1 | cut -c3-

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

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

答案 1 :(得分:1)

你也可以使用带有正则表达式的perl命令行,例如上面的 @shx2 答案中的sed:

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

删除它开头的前两位数字。

答案 2 :(得分:0)

当然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。)