2015-06-22 2 views
1

Я хочу сохранить каждый вывод команды ls в массиве переменных. Я уже пробовал в произвольном каталоге: var=$(ls);echo $var Он хранит целые имена файлов под каталогом в переменной.Магазин ls output в переменной массиве (bash)

Я также пробовал другие методы, но он хранит каждое слово как переменный элемент в массиве.

Есть ли способ сохранить имя каждого файла в каталоге с разными индексами массива?

ответ

2

Да, don't use ls.

Используйте глобус.

var=(*) 
printf '[%q]\n' "${var[@]}" 

%q является Баш-изма (насколько я знаю). %s будет работать там одинаково, кроме как с некоторыми более сложными именами файлов.

Из Bash Reference Manual:

%q 

Causes printf to output the corresponding argument in a format that can be reused as shell input. 
+0

Теперь вы сделали это - где документировали 'q' спецификатор преобразования? Я могу найти модификатор длины 'q' (quad), но не спецификатор преобразования? –

+0

@ DavidC.Rankin Bash-ism, насколько я знаю, я, наверное, должен был упомянуть об этом. Он находится на странице man и bashref. –

+0

Я полностью согласен не использовать 'ls'. Однако, в интересах OP и других читателей с похожим вопросом, стоит упомянуть, что 'var = ($ (ls))' будет работать. И, возможно, небольшое объяснение относительно синтаксиса 'var = (список значений)'. – alvits

Смежные вопросы