shell把文件列表存入数组_在shell中可否把ls的输出存进一个数组变量中?

gogo11 于 2011-08-30 22:24:06发表:

我的,顶上去!

chaipeng 于 2011-08-30 14:30:54发表:

暂时不懂

gogo11 于 2011-08-30 11:05:52发表:

[i=s] 本帖最后由 gogo11 于 2011-8-30 17:08 编辑 [/i]引用:

是一个典型吃力不讨好的例子,很久以前在 CU 上跟你说过,人家没理解,非得说 `ls`这种用法有防止 too many arguments 的错误,其实不然。正确的做法是把 `ls` 换成 *,简洁、准确、高效。关于后面的代码,为了准确起 ...

acrofox 发表于 2011-8-29 18:18

谢谢!

我想到一个方法,但不知道怎么控制流程![code]#!/bin/bash

c=0

A=`ls -1`

filelist[$c]=no

while [ "${filelist[$c]}" != "" ] ; do

# echo C$c

let b=c+1

# echo B$b

filelist[$c]=`echo "$A" | sed -n ''$b' p'`

echo "${c}: ${filelist[$c]}"

((c++))

echo "$c"

done

~

[/code]就是怎么把判断"${filelist[$c]}" != "" 后,在c++?

再加个判断的变量,又觉得繁琐,有简化的没有?[code]#!/bin/bash

c=0

d=0

A=`ls -1`

filelist[$c]=no

while [ "${filelist[$d]}" != "" ] ; do

# echo C$c

let b=c+1

# echo B$b

filelist[$c]=`echo "$A" | sed -n ''$b' p'`

echo -e "${c}:\t${filelist[$c]}"

let c=c+1

let d=c-1

done

[/code]

age 于 2011-08-29 18:51:00发表:

引用:

是一个典型吃力不讨好的例子,很久以前在 CU 上跟你说过,人家没理解,非得说 `ls`这种用法有防止 too many arguments 的错误,其实不然。正确的做法是把 `ls` 换成 *,简洁、准确、高效。关于后面的代码,为了准确起 ...

acrofox 发表于 2011-8-29 18:18

果然, 学习了

acrofox 于 2011-08-29 18:18:26发表:

是一个典型吃力不讨好的例子,很久以前在 CU 上跟你说过,人家没理解,非得说 `ls`这种用法有防止 too many arguments 的错误,其实不然。正确的做法是把 `ls` 换成 *,简洁、准确、高效。关于后面的代码,为了准确起见,$file应该上双引号。[code]c=0

for file in *

do

filelist[$c]="$file"

c=`expr $c + 1`

done[/code]另外,在bash中,c=`expr $c + 1`可以换成 ((c++))

age 于 2011-08-29 18:05:38发表:

[i=s] 本帖最后由 age 于 2011-8-29 18:07 编辑 [/i]

好吧, 试了下, 也没发现好方法,

不过python的话要简单点[code]

import os

filelist=[]

for i in os.listdir("/home/archblue/"):

filelist.append(i)[/code]这样就行了

部分输出如下所示[code]In [19]: fl

Out[19]:

['.ssh',

'VirtualBox VMs',

'test',

,[/code]

gogo11 于 2011-08-29 14:24:59发表:

引用:

换个形式吧for i in "$(ll | sed "s/^.*[0-2][0-9]:[0-9][0-9]//g")"; do echo -e "$i\n"; done这样文件名中的空格就会作为普通字符保留下来, 而不是分隔字符

age 发表于 2011-8-29 11:48

这个不对,仅仅把所有ll的结果赋值给了一个变量,不是把他分别赋值给了数组。

我测试的代码如下:[code]#!/bin/bash

c=0

for file in "$(ls -l | sed "s/^.*[0-2][0-9]:[0-9][0-9]//g")"

do

filelist[$c]=$file

echo -e "第一${c}\t${filelist[$c]}\n"

echo -e "第二${filelist[0]}\n"

echo -e "第三${filelist[1]}"

let c=c+1

done[/code]其中filelist[1]的值是空值,说明赋值方法不对!

age 于 2011-08-29 11:48:11发表:

换个形式吧[code]for i in "$(ll | sed "s/^.*[0-2][0-9]:[0-9][0-9]//g")"; do echo -e "$i\n"; done[/code]这样文件名中的空格就会作为普通字符保留下来, 而不是分隔字符

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值