Intereting Posts
Как настроить сеть для подключаемого сетевого адаптера в ArchLinux (systemd)? Обнуление пространства подкачки FreeBSD? Как активировать текущий сеанс в ConsoleKit? Раздельный / загрузочный раздел на USB Что означает «usb: управление питанием порта может быть ненадежным»? Отправка почты на lan ip не выполнена Отключите монтировку rbind, не влияя на исходное крепление В чем разница между дифференциальным и инкрементным резервным копированием в терминах команды rsync? Есть ли какой-либо конкретный риск, связанный с использованием одного и того же пароля для кошельков root, kde и ключей? Любой способ интерпретировать pstree? Скрипт для почтовых ящиков курьера в среде CentOS LAMP Как запустить скрипт перед выполнением команды dbus-send? Есть ли способ заставить скрипт Bash ввести определенное нажатие клавиши? Остановить netcat, когда VirtualBox закрывается Как подтвердить аппаратную проблему с сетевой картой?

Пробелы как разрывы строк из команды inline for loop

Кто-то хочет рассказать мне, почему пробелы в первой команде кажутся интерпретированными как разрывы строк? Также происходит замена печати для эха.

$for l in $( find *.txt -exec head -1 {} \; ); echo $l; 
  9.16.11
 9:20
 9.19.11
 18,41
 9.21.11
 7:15 
 $find *.txt -exec head -1 {} \; 
 9.16.11 09:20
 9.19.11 18.41
 9.21.11 07:15 

Посмотрите справочную страницу для вашей оболочки, ориентируясь именно на глобальную переменную IFS.

В частности, сделайте следующее:

IFS=$(echo -en "\t\n\0")

Ваша подстановка команды вызывает разбиение слова на его выходе, основанное на IFS. В частности, в этом случае он расщепляется на пространства. Не разбирайте результат find . Вместо этого сделайте следующее:

 for file in *.txt; do head -1 "${file}" done 

Здесь также есть полезная информация о Wooledge wiki.