2016-09-19 7 views
1

У меня есть некоторые пути, хранящиеся в переменной (имя переменной -> тест)Чтение переменной, которая имеет пробел в его значении

echo "${test}" 

Результат:

/abc/pqr/filepath1 
/abc/pqr/lmn/file path2 
/abc/pqr/rst/filepath3 

Я хочу, чтобы избежать «пространство» характер во втором пути и получить владелец для каждого пути, я использую следующую команду:

stat -c '%U' ${test} , works for 1st and 3rd path. 

Как сделать эту работу за 2 nd путь? Заранее спасибо.

+1

У вас есть все пути в одну строку в переменной? Кажется, это может быть лучшим местом для использования массива –

+1

Как вы получаете эти пути в '$ test'? – anubhava

ответ

1

Используйте while конструкцию, чтобы получить имя каждого файла, по одному в каждой строке:

while IFS= read -r f; do stat -c '%U' "$f"; done <<<"$test" 

Пример:

$ echo "$test" 
/abc/pqr/filepath1 
/abc/pqr/lmn/file path2 
/abc/pqr/rst/filepath3 

$ while IFS= read -r f; do echo "$f"; done <<<"$test" 
/abc/pqr/filepath1 
/abc/pqr/lmn/file path2 
/abc/pqr/rst/filepath3 
+2

Но это имя 'file path2', а не' filepath2'. –

+0

@BenjaminW. Мне пока не ясно, хотя, если это так, тогда было бы проще, без необходимости удаления пространства. Ред. – heemayl

+1

Довольно ясно, что OP имеет имена файлов, которые содержат пробелы (он хочет избежать их, а не удалять их, так что работает вызов 'stat'). – chepner