如何在csh脚本中分配变量并将它们用作同一脚本的参数?

时间:2017-01-31 02:37:51

标签: unix set printf echo csh

美好的一天,

希望得到任何人的亲切帮助,提前谢谢。 我有T.csh,看起来像这样:

#! /bin/csh

set a="01 02 03 04 05 06 07 08 09 10 11 12 13"
set b="14 15 16 17 18 19 20 21 22 23 24 25"
set c="01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25"

set X = `grep $1 EOL.txt | head -n1 | cut -d- -f1`
printf "$X\n$2\n$3\nYYYY\n1\nN\n"

变量a,b和c可选地用作printf行中的第三个参数。问题是,每当我尝试运行脚本时,它都会显示未定义的变量。每当我以交互方式分配它们时,这些设置命令行都在工作,但在脚本中,它似乎不起作用。也许我需要初始化它,但无法弄清楚如何。刚接触这个编程的东西,我希望有人可以帮助我。非常感谢。

以下是您参考的示例执行和错误:

CAT-46{bc2}40>set a="01 02 03 04 05 06 07 08 09 10 11 12 13"
CAT-46{bc2}41>./T.csh 4773 XXXX.XX "$a"
62
XXXX.XX
01 02 03 04 05 06 07 08 09 10 11 12 13
82869
1
N
CAT-46{bc2}42>unset a
CAT-46{bc2}43>./T.csh 4773 XXXX.XX "$a"
a: Undefined variable
CAT-46{bc2}44>

如果我手动设置变量,那没关系,但是当我从脚本调用它时,它标记了未定义的变量错误。

麦克

2 个答案:

答案 0 :(得分:0)

prompt> unset a
prompt> ./T.csh 4773 XXXX.XX "$a"

第一个命令“unset a”删除变量。在第二个命令中,您尝试读取变量(在命令行上!)。这就是为什么csh抱怨。

答案 1 :(得分:0)

我发布了另一个答案,因为评论太短了。请看以下内容。

我有一个名为/tmp/T.csh的脚本:

#!/bin/csh
set a="blah"
echo $a
  1. 我的贝壳是bash;我输入/tmp/T.csh:结果为blah(csh执行脚本)。
  2. 还在bash;我输入unset a; /tmp/T.csh $a:结果是一样的。
  3. 还在bash;我输入. /tmp/T.csh:没有结果(bash执行了脚本)。
  4. 我输入csh;现在我在csh。
  5. 我输入/tmp/T.csh:结果为blah(当然)。
  6. 我输入/tmp/T.csh $a:" a:未定义的变量"
  7. set a = something
  8. /tmp/T.csh $a:blah
  9. echo $a:某事
  10. unset a
  11. echo $a:" a:未定义的变量"
  12. 我复制了你所做的一切;希望这可以帮助。 您在命令行上编写的内容时出错,而不是脚本内容。如上所示,即使是简单的echo,如果您在命令行中引用了一个不存在的变量,也会出现错误。