] Для подавления новой строки с помощью []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. К счастью, вам на самом деле не нужно использовать его здесь. [][
] опция []-n[
] с []echo[
] подавляет новую строку. Таким образом, можно сделать:[
echo -n "echec avec le nom $path qui fait"
echo -n $(echo $path|wc -c)
echo "caracteres"
] Было бы гораздо лучше, если бы вы вообще не использовали эхо
. Использование echo
в сочетании с произвольным входом может иметь нежелательные последствия. Более того, вам не нужно wc
для подсчета символов в переменной оболочки - оболочка может делать это так же хорошо и без выполнения отдельного процесса загрузки.
Например:
с помощью wc
:
_path=/some/place/in/my/filesystem
printf %s "$_path" | wc -c
###OUTPUT###
28
no 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 лучше echo? и спецификация расширения параметра POSIX для получения дополнительной информации.