bash/csh - 回显字符串“$#argv”和“#!/bin/csh”
bash/csh - echo the strings "$#argv" and "#!/bin/csh"
我正在尝试通过 echo
将一堆语句写入另一个文件并 运行 它来使用另一个 csh
脚本即时创建一个 csh
。
但我无法回显像 "$#argv"
和 "#!/bin/csh"
这样的字符串
第一个总是被生成器 csh 解析为它的值 #argv
而 shebang
只是给出一个错误 Event not found
。有什么方法可以将这些回显到文件中吗?
我同意生成器 csh
改为 bash
,但输出脚本必须是 csh,因为它使用了一大堆 csh 环境变量。
PS - 我尝试了 echo -e 并尝试在任何可能的地方添加反斜杠,但没有成功。当使用单引号而不是双引号时它也不起作用。
您可以使用带转义符的 echo
从 csh
:
获取输出
echo '$#argv'
echo '#\!/bin/csh"
根据以下成绩单:
% cat testprog.csh
echo '$#argv'
echo '#\!/bin/csh'
% csh testprog.csh
$#argv
#!/bin/csh
%
csh
- 类似于 POSIX-like shells - 使用 single-quoted strings ('...'
) for literal strings(不受 shell 扩展的字符串)——与 double-quoted strings ("..."
),其中 $
-prefixed references expanded (interpolated , 即刻).
因此,以下命令应该有效:
% echo '$#argv'
#argv
然而,对 !
的解释 - 一个 command-history 特征 - 先于 甚至是通常的 shell 扩展,因此 需要一个额外的转义层 \
:
% echo '#\!/bin/csh'
#!/bin/csh
此外 - 同样,如 POSIX-like shells - 您可以 mix 在直接相邻的标记中引用样式 到 形成一个 单一的,复合的 字符串 :
% set arg = 3
% echo 'if($#argv < '"$arg"') then'
if($#argv < 3) then
请注意 只有 $arg
是如何扩展(插值)的,因为(唯一的部分)包含在 "..."
.
中
在这种特殊情况下,unquoted 使用 $arg
也可以,但请注意 使用 unquoted(子)字符串包含 模式元字符 (例如 *
和 ?
) - 再一次,如 POSIX-like shells - 使(整个)字符串受制于 globbing(文件名扩展).
我正在尝试通过 echo
将一堆语句写入另一个文件并 运行 它来使用另一个 csh
脚本即时创建一个 csh
。
但我无法回显像 "$#argv"
和 "#!/bin/csh"
第一个总是被生成器 csh 解析为它的值 #argv
而 shebang
只是给出一个错误 Event not found
。有什么方法可以将这些回显到文件中吗?
我同意生成器 csh
改为 bash
,但输出脚本必须是 csh,因为它使用了一大堆 csh 环境变量。
PS - 我尝试了 echo -e 并尝试在任何可能的地方添加反斜杠,但没有成功。当使用单引号而不是双引号时它也不起作用。
您可以使用带转义符的 echo
从 csh
:
echo '$#argv'
echo '#\!/bin/csh"
根据以下成绩单:
% cat testprog.csh
echo '$#argv'
echo '#\!/bin/csh'
% csh testprog.csh
$#argv
#!/bin/csh
%
csh
- 类似于 POSIX-like shells - 使用 single-quoted strings ('...'
) for literal strings(不受 shell 扩展的字符串)——与 double-quoted strings ("..."
),其中 $
-prefixed references expanded (interpolated , 即刻).
因此,以下命令应该有效:
% echo '$#argv'
#argv
然而,对 !
的解释 - 一个 command-history 特征 - 先于 甚至是通常的 shell 扩展,因此 需要一个额外的转义层 \
:
% echo '#\!/bin/csh'
#!/bin/csh
此外 - 同样,如 POSIX-like shells - 您可以 mix 在直接相邻的标记中引用样式 到 形成一个 单一的,复合的 字符串 :
% set arg = 3
% echo 'if($#argv < '"$arg"') then'
if($#argv < 3) then
请注意 只有 $arg
是如何扩展(插值)的,因为(唯一的部分)包含在 "..."
.
在这种特殊情况下,unquoted 使用 $arg
也可以,但请注意 使用 unquoted(子)字符串包含 模式元字符 (例如 *
和 ?
) - 再一次,如 POSIX-like shells - 使(整个)字符串受制于 globbing(文件名扩展).