我试图使用另一个csh脚本动态创建一个csh,方法是将一堆语句放到另一个文件上并运行它。
但是我不能回显像"$#argv"和"#!/bin/csh"这样的字符串
第一个总是被生成器csh解析为它的#argv值,而shebang只是给出了一个错误,表示Event not found。我有没有办法把这些回音到文件里?
我同意生成器csh改为bash,但是输出脚本必须是csh,因为它使用了大量csh环境变量。
PS -我尝试回波-e和尝试添加反斜杠,我可以,但没有成功。当使用单引号而不是双引号时,它也不起作用。
发布于 2017-02-16 01:54:44
csh -类似于类POSIX使用字符串(**'...'**)来表示文字字符串(不受shell扩展约束的字符串)与double-quoted字符串(**"..."**),形成对比,后者中 $**-prefixed引用为_E 227展开E 128_E 229(内插,)**。
因此,以下命令应该可以工作:
% echo '$#argv'
#argv然而,对!的解释--一个命令历史特性--甚至先于通常的shell展开,因此需要使用 \进行额外的转义。
% echo '#\!/bin/csh'
#!/bin/csh另外,就像在类似POSIX的shells 中一样,您可以将混合引用直接相邻令牌到中的样式,形成一个单、复合<代码>E 251E 152字符串e 253
% set arg = 3
% echo 'if($#argv < '"$arg"') then'
if($#argv < 3) then注意$arg是如何展开(内插的)的,因为它是(唯一的一部分)包含在"..."中的。
在这种特殊情况下,未引用的$arg使用也会有效,但是请注意,使用包含模式元字符的未引号的(子)字符串(例如E 267$argE 171$arg>和E 272 ?**) --又一次,如在POSIX类外壳中--E 277)使(整个)字符串服从E 178__E 279globbingE 180(文件名扩展)**。
发布于 2017-02-16 01:39:04
您可以使用echo和转义符从csh获得输出。
echo '$#argv'
echo '#\!/bin/csh"以下记录如下:
% cat testprog.csh
echo '$#argv'
echo '#\!/bin/csh'
% csh testprog.csh
$#argv
#!/bin/csh
% https://stackoverflow.com/questions/42263202
复制相似问题