首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash/csh -回显字符串"$#argv“和"#!/bin/csh”

bash/csh -回显字符串"$#argv“和"#!/bin/csh”
EN

Stack Overflow用户
提问于 2017-02-16 01:26:57
回答 2查看 1.8K关注 0票数 1

我试图使用另一个csh脚本动态创建一个csh,方法是将一堆语句放到另一个文件上并运行它。

但是我不能回显像"$#argv""#!/bin/csh"这样的字符串

第一个总是被生成器csh解析为它的#argv值,而shebang只是给出了一个错误,表示Event not found。我有没有办法把这些回音到文件里?

我同意生成器csh改为bash,但是输出脚本必须是csh,因为它使用了大量csh环境变量。

PS -我尝试回波-e和尝试添加反斜杠,我可以,但没有成功。当使用单引号而不是双引号时,它也不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-16 01:54:44

csh -类似于类POSIX使用字符串(**'...'**)来表示文字字符串(不受shell扩展约束的字符串)与double-quoted字符串(**"..."**),形成对比,后者中 $**-prefixed引用为_E 227展开E 128_E 229(内插,)**。

因此,以下命令应该可以工作:

代码语言:javascript
复制
% echo '$#argv'
#argv

然而,对!的解释--一个命令历史特性--甚至先于通常的shell展开,因此需要使用 \进行额外的转义。

代码语言:javascript
复制
% echo '#\!/bin/csh'
#!/bin/csh

另外,就像在类似POSIX的shells 中一样,您可以将混合引用直接相邻令牌到中的样式,形成一个单、复合<代码>E 251E 152字符串e 253

代码语言:javascript
复制
% 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(文件名扩展)**。

票数 2
EN

Stack Overflow用户

发布于 2017-02-16 01:39:04

您可以使用echo和转义符从csh获得输出。

代码语言:javascript
复制
echo '$#argv'
echo '#\!/bin/csh"

以下记录如下:

代码语言:javascript
复制
% cat testprog.csh
echo '$#argv'
echo '#\!/bin/csh'

% csh testprog.csh
$#argv
#!/bin/csh
% 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42263202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档