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很多年了,经常运行到这种东西。
我是 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很多年了,经常运行到这种东西。