如何适应bash数组中的空格

use*_*442 1 bash sh

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

#!/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
Run Code Online (Sandbox Code Playgroud)

我运行了这个脚本并返回了

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
Run Code Online (Sandbox Code Playgroud)

我希望程序返回这一行

OIS016_OD.bmp  OIS016_Optic Disc Cube 200x200_OS _ILM_RNFLOb.dat 
Run Code Online (Sandbox Code Playgroud)

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

data=(`ls *.dat | sort`) 
Run Code Online (Sandbox Code Playgroud)

che*_*ner 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
Run Code Online (Sandbox Code Playgroud)

  • 不需要extglob,你可以使用[大括号扩展](http://www.gnu.org/software/bash/manual/bashref.html#Brace-Expansion):`image =(*.{bmp,jpeg,jpg} )` (2认同)