LINUX.ORG.RU

как в bash в цикле экранировать имена файлов в списке?

 ,


0

1

Как заставить for читать имена файлов полностью, не прерываясь на пробелах?

basarga@wst ~/test/ebobo $ ls -Q1
"12 12"
"23 23"
"34 34"
" 45 45"
"56 56"
"666"
basarga@wst ~/test/ebobo $ for file in $(ls -Q1) ; do echo $file; done
"12
12"
"23
23"
"34
34"
"
45
45"
"56
56"
"666"

IFS поменяй временно.

IPR ★★★★★ ()
Ответ на: комментарий от basarga

Спасибо! Почему -1 нельзя при пайпе?

Общий ответ - оно для этого не предназначалось.
Более конкретный - например, для имен с пробелами ls добавляет кавычки; скорее всего это не то, что ты хочешь увидеть в переменной с именем файла.

Kroz ★★★★★ ()
Последнее исправление: Kroz (всего исправлений: 1)
Ответ на: комментарий от Kroz

Что так кавычки одинарные, что так. То есть хуже не станет от -1. Может излишне разве что.

grem ★★★★★ ()
Ответ на: комментарий от vodz

А чтобы вовсе прекратили совать ls в пайп надо третью мировую войну устроить, не меньше. Но оно того будет стоить.

legolegs ★★★★★ ()

Не использовать баш.

В нормальных языках for ничего не знает про какие-то там пробелы.

anonymous ()
Ответ на: комментарий от vodz

По аналогичной схеме можно использовать find, не вижу проблем в ls -1, а в * вообще может быть проблема, если файлов слишком много.

infomeh ★★ ()
Ответ на: комментарий от superuser

Слово «исправить» означает, что сделано неправильно. Для изменения условия используется слова типа «добавить, дополнить».

vodz ★★★★★ ()
Ответ на: комментарий от superuser

какой то баш не полноценный, элементарные вещи не может

Дядя, ты дурак? Полноценность как раз определяется тем, что можно сделать и так и этак. На поставленную задачу было решение. На изменение было дополнение. Если б оно делало только так, как вы в данную секунду придумали и никак иначе, это и было неполноценностью.

vodz ★★★★★ ()
Ответ на: комментарий от vodz

Одинарные, если -Q поставить, то двойные будут вместо одинарных. Чтобы кавычек не было, то нужно -N. Это в генту. Но тогда нужно именно -1N использовать или добавить разделитель запятую вместо -1 - не помню параметр.

grem ★★★★★ ()
Ответ на: комментарий от grem

Одинарные, если -Q поставить, то двойные будут вместо одинарных.

Ну с Q то да, но одинарные по -1... Самое смешное, что если это типа по-новому модно-молодежно, то это почти та самая третья мировая по любителям -1 в пайп, ибо по-старому никакого эффекта для пайпа у -1 не было.

vodz ★★★★★ ()
$ find ./ -type f -print0 | xargs -I{} -r0 echo "file [{}]"
file [./12 12]
file [./23 23]
file [./34 34]
file [./ 45 45]
file [./56 56]
file [./666]
DiMoN ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.