电脑技术学习

对话 UNIX: Squirrel--可移植的 shell 和脚本语言

dn001

  改进表

  与典型 shell 相比,Squirrel 的优秀特性之一就是它丰富的数据结构。如果数据可以进行良好地组织,那么即使是复杂的问题通常也能够快速得到解决。Squirrel 提供了真正的对象、异构数组和关联数组(在 Squirrel 中称为 表)。

  一个 Squirrel 表由一些 slot 或 (键-值)对组成。除 Null 以外的任何值都可以充当一个键;任何值都可以被分配给一个 slot。您将使用 “箭头 操作符创建一个新的 slot(<-)。

  让我们对 清单 2 的代码稍加改进,在将目录转变为任何子目录之前展示它的内容。使用什么方法?使用一个本地表在单独的 slot 中存放文件和子目录,然后相应地处理两个类别。清单 3 展示了新的代码。

  清单 3. 增强后的清单 2 将首先输出目录的内容,然后递归到子目录

 
#!/usr/bin/env squirrelsh 
 
function reveal( filedir ) { 
 local tally = {}; 
 tally[FILE] <- []; 
 tally[DIR] <- []; 
  
 if ( !exist( filedir ) ) { 
  return; 
 } 
   
 if ( filename( filedir ) == ".." || filename( filedir ) == "." ) { 
  return; 
 } 
   
 local names = readdir( filedir ); 
  
 foreach( index, name in names ) { 
  tally[ filetype( name ) ].append( name ) ; 
 } 
 
 foreach( index, file in tally[FILE] ) { 
  printl( file ); 
 } 
 
 foreach( index, dir in tally[DIR] ) { 
  printl( filename( dir ) + "/" ); 
 } 
  
 foreach( index, dir in tally[DIR] ) { 
  reveal( dir ); 
 } 
 
} 
 
local entrIEs = readdir( (__argc >= 2) ? __argv[1] : "." ); 
 
exit( 0 ); 

标签: