cshell无法设置带空格的字符串数组

时间:2015-06-15 15:48:18

标签: csh

我是c shell的新手。我一直在尝试定义一个命令数组,然后使用循环运行它们,但它会逐字逐句解析命令而不是命令命令。

代码是:

#!/bin/csh


set commands=("./cmd option1 option2" \
"./cmd option1 option2" \
"./cmd option1 option2" \
"./cmd option1 option2" \
)
foreach  c ($commands)

        echo $c
        $c
end
#EOF

输出结果为:

./cmd 
Output 
option1
command not found
option2
command not found

我认为错误在循环中,但我无法修复它。

1 个答案:

答案 0 :(得分:2)

$command更改为$command:q

例如:

% cat foo.csh
#!/bin/csh -f

set arr = ( 'zero one' 'two three' )
foreach elem ($arr:q)
    echo $elem:q
end
% ./foo.csh
zero one
two three
% 

这是:q后缀有效且用双引号括起变量引用的情况。

请注意,我已将-f添加到#!行。这告诉csh 而不是加载启动文件,这会使您的脚本稍微快一点,更重要的是,避免对您自己的环境的无意依赖。 csh或tcsh脚本应该(几乎)始终在-f行上有#!。 (这不适用于sh,ksh,bash或zsh脚本;对于那些shell,-f具有不同的含义。)

  

我是c shell的新手

完美!这意味着这是一个转换到程序员友好的shell的好时机,比如bash甚至sh。

bash支持数组,虽然语法比csh更不方便 - 但是bash的行为更加一致。一个例子:我不确定我是否可以通过csh和/或tcsh的手册证明:q在这种情况下会起作用;我不得不使用反复试验。我已经使用了很多年的csh,而且我经常遇到这种情况。

阅读本文:http://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot