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

cshell cannot set array of strings with spaces

我是 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

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

$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 脚本;对于那些 shells,-f 具有不同的含义。)

I am new to c shell

完美! 这意味着现在是切换到对程序员更友好的 shell 的好时机,例如 bash 甚至 sh。

bash 支持数组,尽管语法不如 csh 方便——但 bash 的行为更一致。一个例子:我不确定我能否从 csh 的 and/or tcsh 手册中证明 :q 在这种情况下有效;我不得不反复试验。我用csh很多年了,经常运行到这种东西。

读这个:http://www.perl.com/doc/FMTEYEWTK/versus/csh.whynot