Проблема с получением массива имен файлов, которые содержат пробелы в Bash - PullRequest
0 голосов
/ 02 мая 2020

Я хочу написать сценарий 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 содержит только имя первого файла.

Любая помощь очень ценится.

1 Ответ

1 голос
/ 03 мая 2020

Вы можете использовать переводы строк как IFS.

IFS=$'\n'
list_array=(`ls -p -m -1 . | grep -v /`)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...