【问题标题】:Problem getting an array of filenames which contain whitespaces in Bash在 Bash 中获取包含空格的文件名数组时出现问题
【发布时间】:2020-05-03 19:39:45
【问题描述】:

我想编写一个 bash 脚本,我需要在一个目录中获取文件名,我已经这样做了:

list=`ls -p -m -1 $dir | grep -v /`
list=`echo $list | tr ' ' ','`
IFS=',' read -ra list_array <<< $list

如果当前目录中不存在带有空格的文件,则变量list_array 包含正确的以空格分隔的文件名数组:

 $ echo "${list_array[*]}"
 a a.rar a.tar a.zip blah blah blah

但在某些文件名中包含空格的情况下,这将无法正常工作。为了缓解这种情况,我将其更改如下:

list=`ls -p -m  $dir | grep -v /`     #This doesn't work in for filenames without whitespace
IFS=',' read -ra list_array <<< $list  

但现在list_array 只保存第一个文件的名称。

非常感谢任何帮助。

【问题讨论】:

标签: bash scripting


【解决方案1】:

您可以使用换行符作为 IFS。

IFS=$'\n'
list_array=(`ls -p -m -1 . | grep -v /`)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 2012-07-07
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    相关资源
    最近更新 更多