当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 18 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : [问题]如何调用数组??
帖子发表于 : 2008-08-24 1:57 
头像

注册: 2007-07-17 22:09
帖子: 133
地址: 广东
送出感谢: 0 次
接收感谢: 0 次
我想些一个Script,作用是列出文件夹内所有某一类型文件并把文件名存储到一个数组,以后只要输入序数就输出相应文件名。

下面是我写的程序,错误是无效标识符。我应该怎样改?

代码:
#!/bin/bash
declare -i count
declare -a name
ls *.cue | while read name[$count]
do
   count=count+1
   echo "[$count] ${name[$count]}"
done


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-08-24 13:31 
头像

注册: 2005-07-21 19:13
帖子: 681
地址: Peking, China
送出感谢: 0 次
接收感谢: 0 次
代码应该是这样的

代码:
#!/bin/bash
declare -i count=0
declare -a filenames

for filename in `ls *.cue`; do
   filenames[$count]=$filename
   count=$count+1
done

while read n
do
   echo "[$n]: ${filenames[$n]}"
done


_________________


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-08-24 13:50 
头像

注册: 2007-07-17 22:09
帖子: 133
地址: 广东
送出感谢: 0 次
接收感谢: 0 次
解决了,谢谢。

但我想让它先打印一次列表,改成如下代码为什么不成功?
代码:
for filename in `ls *.cue`; do
   filenames[$count]=$filename
   count=$count+1
   echo "[$count]: ${filenames[$count]}"
done


只能这样才可以?
代码:
#!/bin/bash
declare -i count=0
declare -a filenames
declare -i i

for filename in `ls *.cue`; do
   filenames[$count]=$filename
   count=$count+1
done

for(( i=0; i<$count; i=$i+1 ))
do
   echo "[$i]: ${filenames[$i]}"
done


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-08-24 14:00 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
woohaha 写道:
解决了,谢谢。

但我想让它先打印一次列表,改成如下代码为什么不成功?
代码:
for filename in `ls *.cue`; do
   filenames[$count]=$filename
   count=$count+1
   echo "[$count]: ${filenames[$count]}"
done

[/code]


这样吧,效果是一样的:
代码:
for filename in `ls *.cue`; do
   filenames[$count]=$filename
   count=$count+1
   echo "[$count]: $filename"
done


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-08-24 14:04 
头像

注册: 2005-07-21 19:13
帖子: 681
地址: Peking, China
送出感谢: 0 次
接收感谢: 0 次
woohaha 写道:
解决了,谢谢。

但我想让它先打印一次列表,改成如下代码为什么不成功?
代码:
for filename in `ls *.cue`; do
   filenames[$count]=$filename
   count=$count+1
   echo "[$count]: ${filenames[$count]}"
done


只能这样才可以?
代码:
#!/bin/bash
declare -i count=0
declare -a filenames
declare -i i

for filename in `ls *.cue`; do
   filenames[$count]=$filename
   count=$count+1
done

for(( i=0; i<$count; i=$i+1 ))
do
   echo "[$i]: ${filenames[$i]}"
done


在设置数组的时候直接打印当前处理的 count 和 filename 就可以了。
代码:
for filename in `ls *.cue`; do
   echo "[$count]: $filename"
   filenames[$count]=$filename
   count=$count+1
done


_________________


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-08-24 14:06 
头像

注册: 2005-07-21 19:13
帖子: 681
地址: Peking, China
送出感谢: 0 次
接收感谢: 0 次
woohaha 写道:
解决了,谢谢。

但我想让它先打印一次列表,改成如下代码为什么不成功?
代码:
for filename in `ls *.cue`; do
   filenames[$count]=$filename
   count=$count+1
   echo "[$count]: ${filenames[$count]}"
done


echo 语句放错地方了,这时候的 count 已经变化。


_________________


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-08-24 14:27 
头像

注册: 2007-07-17 22:09
帖子: 133
地址: 广东
送出感谢: 0 次
接收感谢: 0 次
原来是这样。现在又出现问题了。当文件名含有空格时无效。要怎样改正呢?


页首
 用户资料  
 
8 楼 
 文章标题 :
帖子发表于 : 2008-08-24 14:53 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
woohaha 写道:
原来是这样。现在又出现问题了。当文件名含有空格时无效。要怎样改正呢?
最简单的办法,把空格先用特殊字符替换掉,输出时再还原之 :lol:


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2008-08-24 14:56 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
其实生成这个数组还有更简单的方法:

filenames=(`ls *.cue`) 就可以了,要把空格处理掉,不然含空格的文件名会被当成到两个元素。


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2008-08-24 15:26 
头像

注册: 2007-07-17 22:09
帖子: 133
地址: 广东
送出感谢: 0 次
接收感谢: 0 次
想过
代码:
ls *.cue|tr ' ' '_'


但是不会它真正改名[/code]


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2008-08-24 16:09 
头像

注册: 2005-07-21 19:13
帖子: 681
地址: Peking, China
送出感谢: 0 次
接收感谢: 0 次
这是修改后的代码,可以处理空格。

代码:
declare -a filenames=(`ls *.cue | tr ' ' '_'`)
for i in `seq 0 $((${#filenames[*]} - 1))`; do
        filenames[$i]=${filenames[@]//_/ }
        echo "$i: ${filenames[$i]}"
done


_________________


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2008-08-24 23:04 
头像

注册: 2007-07-17 22:09
帖子: 133
地址: 广东
送出感谢: 0 次
接收感谢: 0 次
代码:
$ sh -v space.sh
declare -a filenames=(`ls *.cue | tr ' ' '_'`)
space.sh: 1: Syntax error: "(" unexpected


页首
 用户资料  
 
13 楼 
 文章标题 :
帖子发表于 : 2008-08-25 9:13 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
数组的应用,在bash里面极少。一般是设计者思路不对,才会用数组。
lin下作事情,基本都是小文件处理。


_________________
● 鸣学


页首
 用户资料  
 
14 楼 
 文章标题 :
帖子发表于 : 2008-08-25 9:33 
头像

注册: 2005-07-21 19:13
帖子: 681
地址: Peking, China
送出感谢: 0 次
接收感谢: 0 次
woohaha 写道:
代码:
$ sh -v space.sh
declare -a filenames=(`ls *.cue | tr ' ' '_'`)
space.sh: 1: Syntax error: "(" unexpected


执行一下 sh -version,看一下你用的是 dash 还是 bash。Ubuntu 的 /bin/sh 默认指向的是 dash。


_________________


页首
 用户资料  
 
15 楼 
 文章标题 :
帖子发表于 : 2008-08-26 13:37 
头像

注册: 2007-07-17 22:09
帖子: 133
地址: 广东
送出感谢: 0 次
接收感谢: 0 次
eexpress 写道:
数组的应用,在bash里面极少。一般是设计者思路不对,才会用数组。
lin下作事情,基本都是小文件处理。


我做这个脚本是想列出目录里的某一类型文件,再输入编号调用,省去输入文件名。难道有其他更好的办法?

patrickhe 写道:
woohaha 写道:
代码:
$ sh -v space.sh
declare -a filenames=(`ls *.cue | tr ' ' '_'`)
space.sh: 1: Syntax error: "(" unexpected


执行一下 sh -version,看一下你用的是 dash 还是 bash。Ubuntu 的 /bin/sh 默认指向的是 dash。


奇怪的很。

代码:
woohaha@woohaha-laptop:~$ sh -version
sh: Illegal option -r


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 18 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译