我是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
我认为错误在循环中,但我无法修复它。
答案 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,而且我经常遇到这种情况。