我正在写一个通用命令执行器shell脚本generic_script.csh。基本上它包含:
#!/usr/bin/csh -f
foreach x ("$argv")
$x
end
用法:generic_script.csh "ls -l" "groups" "mkdir /tmp/abc"
预期输出:按顺序执行参数中的命令。
问题:当我在foreach循环中解析$argv时,
1.如果我使用$argv
,参数将被空格分隔:
ls
-l
groups
mkdir
/tmp/abc
1.如果我使用"$argv"
,则$x值为ls -l groups mkdir /tmp/abc
。
如何根据“”拆分参数,即
ls -l
groups
mkdir /tmp/abc
先谢谢你了!
1条答案
按热度按时间jgzswidk1#
数组
argv
有正确的元素,只是foreach语法将它们分开了。但是,使用$argv[3]
获取元素将有效。这迫使我们循环从1到
$#argv
的数字。据我所知,我们正在做以下事情:
它给出以下输出
因为你的例子看起来像一个任意长度的列表,你需要有一个实际的循环,而不是使用
$1
,$2
,...但在另一个环境中,你可以使用它们,它们不会被拆分:我正在准备BASH中的测试问题,但刚刚了解到它们需要在bash,ksh,sh,csh中的任何一个中可行。现在我知道csh不做函数了……太好了!