Труба в сценарии оболочки

Я сделал этот маленький скрипт:

#! /bin/sh path="foo" while touch $path ; do path=./${path} done echo "echec avec le nom $path qui fait" echo $path|wc -c echo "caracteres" 

Как я могу напечатать на той же линии 3 эхо-строки? Заранее спасибо 😉

3 Solutions collect form web for “Труба в сценарии оболочки”

Чтобы подавить новую строку с echo используемым в Linux-системах 1 , используйте -n :

 echo -n "echec avec le nom $path qui fait" 

Тем не менее, wc также печатает новую строку и не может быть подавлен, но ее можно отбросить:

 size=$(echo $path | wc -c); echo "echec avec le nom $path qui fait $((size-1)) caracteres" 

Я использовал $((size-1)) здесь, потому что wc подсчитал вывод новой строки с помощью эха. Вместо этого вы можете использовать size=$(echo -n $path | wc -c) , но остерегайтесь оговорки о нестандартности -n .


1. -n реализованный эхом GNU coreutil, является нестандартным, поэтому YMMV. К счастью, вам не нужно использовать его здесь.

Было бы намного лучше, если бы вы не использовали echo вообще. Использование echo сочетании с произвольным вводом может иметь непреднамеренные эффекты. Более того, вам не нужно wc для подсчета символов в переменной оболочки – оболочка может сделать это так же хорошо и без выполнения отдельного процесса для загрузки.

Например:

с wc :

 _path=/some/place/in/my/filesystem printf %s "$_path" | wc -c ###OUTPUT### 28 

нет wc :

 printf %s "${#_path}" ###OUTPUT### 28 

два аргумента printf :

 printf 'Arg char count:\t%s\nArg contents:\t%s\n' \ "${#_path}" "$_path" ###OUTPUT### Arg char count: 28 Arg contents: /some/place/in/my/filesystem 

ваша команда:

 printf 'echec avec le nom %s qui fait %s caracteres\n' \ "$_path" "${#_path}" ###OUTPUT### echec avec le nom /some/place/in/my/filesystem qui fait 28 caracteres 

См. Почему printf лучше, чем эхо? и спецификации для расширения параметра POSIX для получения дополнительной информации.

Опция -n с echo подавляет новую строку. Итак, вы можете сделать:

 echo -n "echec avec le nom $path qui fait" echo -n $(echo $path|wc -c) echo "caracteres" 
  • Размер скрипта для скрипта 57M
  • Как использовать вывод команды для процесса в цикле в Bash?
  • Необходимо получить последний файл с меткой даты за каждый месяц
  • Команда Bash для разделения одной строки текста на две строки
  • объявление переменной не работает
  • Определение функции оболочки: почему есть место после открытия скобки?
  • Допускаются двойные утверждения «if» в сценариях оболочки
  • один лайнер для использования памяти
  • Результат вывода команды времени на переменную в сценарии bash
  • Команда для отображения использования памяти, использования диска и загрузки процессора
  • Список файлов папок, рекурсивных для файла, столбцов соответствия
  • Linux и Unix - лучшая ОС в мире.