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

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

#! /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" 
  • Добавление двух чисел с помощью expr
  • Сценарий оболочки для запуска приложения Node.js с помощью Gulp каждые два часа
  • Как читать текстовый файл по строкам, который не является постоянным в сценариях оболочки
  • Поиск строки в выводе команды
  • Неправильный способ перечисления версий python из bash
  • Окрашивание выхода `cat`?
  • Нажмите любую клавишу, чтобы остановить цикл
  • Как проверить, сколько файлов было создано за одну неделю?
  • Shell Script: для извлечения части строки из файла после того, как найдено совпадение
  • Как извлекать значения из файла с помощью шаблонов из столбца в другом файле и вставлять их в новый столбец?
  • Почему sh отображает ошибку, если bash не работает?
  • Linux и Unix - лучшая ОС в мире.