[英]bash/csh - echo the strings “$#argv” and “#!/bin/csh”
我想創建一個csh
與另一飛csh
的腳本echo
荷蘭國際集團一堆報表到另一個文件並運行它。
但我無法回復像"$#argv"
和"#!/bin/csh"
這樣的字符串
第一個總是由生成器csh解析為#argv
值,而shebang
只是給出一個錯誤,說Event not found
。 有什么方法可以回復這些文件嗎?
我很好用生成器csh
代替bash
但輸出腳本必須是csh,因為它使用了一大堆csh環境變量。
PS - 我試過echo -e並嘗試在任何地方添加反斜杠但是徒勞無功。 當使用單引號而不是double時,它也不起作用。
csh
- 類似於POSIX類shell - 使用單引號字符串( '...'
)表示文字字符串 (不受shell擴展影響的字符串 ) - 與雙引號字符串( "..."
)形成對比,其中擴展了 $
-prefixed引用(插入,立即) 。
因此,以下命令應該起作用:
% echo '$#argv'
#argv
但是, 解釋!
- 命令歷史記錄功能 - 甚至在通常的shell擴展之前 ,因此需要使用\\
進行額外的轉義層 :
% echo '#\!/bin/csh'
#!/bin/csh
此外 - 再次,如在POSIX類似的shell中 - 您可以在直接相鄰的標記中混合引用樣式以形成單個復合字符串 :
% set arg = 3
% echo 'if($#argv < '"$arg"') then'
if($#argv < 3) then
注意只有 $arg
被擴展(插值),因為(“唯一的部分”)包含在"..."
。
在這種特殊情況下, $arg
引用使用也會起作用,但請注意使用包含模式元字符 (例如*
和?
)的未加引號 (子)字符串 - 再次,如在POSIX類似的shell中 - 使得(整個) )字符串受globbing (文件名擴展) 。
您可以使用echo
with escapes從csh
獲取該輸出:
echo '$#argv'
echo '#\!/bin/csh"
根據以下成績單:
% cat testprog.csh
echo '$#argv'
echo '#\!/bin/csh'
% csh testprog.csh
$#argv
#!/bin/csh
%
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.