2017-02-16 292 views
1

我想创建与另一csh脚本飞一个csh通过echo荷兰国际集团一堆报表到另一个文件并运行它。

但我不能呼应琴弦一样"$#argv""#!/bin/csh"

第一个总是由发电机CSH解析成其#argv值和shebang只是给了一个错误说Event not found。有什么方法可以将这些回复到文件?

我确信生成器cshbash,但输出脚本必须是csh,因为它使用了一大堆csh环境变量。

PS - 我尝试echo -e并尝试在任何地方添加反斜杠,但徒劳无功。当使用单引号而不是双引号时,它也不起作用。

+1

环境变量并不真的特定于任何一个shell。如果变量位于您的环境中,它将位于任何子进程的环境中(并且如果该子进程是shell,则假定该名称是有效标识符,则该变量可用作变量)。 – chepner

+0

@chepner我不知道!谢谢。 –

回答

2

csh - 类似POSIX般的炮弹 - 用途单个 - 引用字符串('...')为文字(字符串,不受shell扩展) - 在 -quoted字符串("..."),其中$ -prefixed引用的对比扩大(插值,瞬间)

因此,下面的命令应该工作:

% echo '$#argv' 
#argv 

然而,!解释 - 一个命令历史功能 - 之前甚至通常的壳扩展,并且因此需要的附加层与\逃逸:

% echo '#\!/bin/csh' 
#!/bin/csh 

ADDIT ionally - 再次,在POSIX般的炮弹 - 可以混合引用样式直接相邻的标记形式单一,复合

% set arg = 3 
% echo 'if($#argv < '"$arg"') then' 
if($#argv < 3) then 

注意如何只有$arg是扩大(内插),因为(唯一的部分)被包含在"..."中。

在这种特殊情况下,不带引号使用$arg会工作过,但要注意使用加引号(子)含模式字符串元字符(如*? - 再次,如POSIX-like shell-使(整个)字符串受制于globbing(文件名扩展)

+1

真棒解释。谢谢! –

+0

@VivekVK:我的荣幸;很高兴这很有帮助。 – mklement0

1

您可以使用echo与逃逸摆脱csh该输出:

echo '$#argv' 
echo '#\!/bin/csh" 

按照以下成绩单:

% cat testprog.csh 
echo '$#argv' 
echo '#\!/bin/csh' 

% csh testprog.csh 
$#argv 
#!/bin/csh 
% 
+0

谢谢!你的测试用例可以正常工作,但是当我像这样使用它时,它不会:'echo'if('$#argv'<$ arg)then“'其中$ arg是需要用$ value代替的局部变量#argv不应该是。 –