1

我正在循环某个命令的目录;但是,我不知道如何容纳空间

#!/bin/bash

image=(`ls *.bmp *.jpeg *.jpg | sort`)
data=(`ls *.dat | sort`)

for ((i=0; i < ${#image[@]}; i++))
do
  echo ${image[$i]} ${data[$i]}
done

我运行了这个脚本,它返回了

OIS032_OS.bmp Disc
OIS034_OS.bmp Cube
OIS035_OD.bmp 200x200_9-30-2010_OD
OIS035_OS.bmp _ILM_RNFLOb.dat
OIS036_OD.bmp OIS007_Optic
OIS036_OS.bmp Disc

我希望程序返回这一行

OIS016_OD.bmp  OIS016_Optic Disc Cube 200x200_OS _ILM_RNFLOb.dat 

如何修复 bash 数组以存储我需要的内容

data=(`ls *.dat | sort`) 
4

2 回答 2

6

不要打电话ls;只需使用模式匹配来填充数组:

shopt -s extglob    # We'll use a more complicated glob to avoid needing to sort
image=( *.@(bmp|jpeg|jpg) )
data=( *.dat )

for ((i=0; i < ${#image[@]}; i++))
do
  echo ${image[$i]} ${data[$i]}
done
于 2012-09-07T18:32:32.880 回答
1

我相信但不确定你可以用readarrayand做你想做的事MAPFILE

我问过类似这样的问题:Bash declaratively defined a list to loop on

这里另一个类似的答案链接:https ://stackoverflow.com/a/7220619/318174

于 2012-09-07T18:26:24.107 回答