Почему при передаче аргумента в функцию у него обрезаются пробелы?
Добрый день, я только начинаю свой путь в bash, и сразу сталкиваюсь с проблемкой. Лучше просто покажу на примере. Условно есть примерно такой код:
#!/bin/sh func() { echo -n $1 read var } func "Введите значение: " |
#!/bin/sh func() { echo -n $1 read var } func "Введите значение: "
Я ожидаю, что будет всё красиво, после "Введите значение:" будет пробел, чтобы визуально отделять текст сценария от ввода пользователя, но по итогу получаю это:
Т.е просто срезается пробел. Можно ли этого как-то избежать? Или это конкретно проблема Void Linux?
P.S
Если не передавать строку как аргумент для функции, то всё нормально.
Дополнительно:
Как насчёт
func() { echo -n "$1" read var } |
func() { echo -n "$1" read var }
- Кхм... Спасибо большое. Даже стыдно как-то, что сам не додумался.
Ответы:
Возьмите параметр в кавычки, иначе команда echo не видит где заканчивается ваш параметр.
Ну и если версия баш не древняя, то команда read сама умеет промпт выводить типа
read -p "$1" var
echo -n $1
интерпретирует аргументы перед передачей, поэтому может произвольно обращаться с переданной строкой. Чтобы получить строку неизменной - ее нужно "защитить" :)
echo -n "$1"
вот таким образом
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


Проблема, с которой вы столкнулись, связана с тем, что при передаче аргумента в функцию пробелы обрезаются. Это может быть вызвано различными причинами, и в данном ответе я постараюсь рассмотреть несколько возможных сценариев, которые могут привести к такому поведению.
1. Одной из причин может быть использование функции trim() внутри вашей функции. Функция trim() удаляет пробелы и другие символы с начала и конца строки. Если вы передаете аргумент в функцию после обработки функцией trim(), то все пробелы будут удалены.
2. Еще одной возможной причиной может быть использование функции preg_replace() с шаблоном, который удаляет пробелы. Например, если вы используете preg_replace('/\s+/','',$arg), то все пробелы будут удалены из аргумента.
3. Также стоит убедиться, что при передаче аргумента в функцию вы используете правильные кавычки. Например, если вы передаете строку в функцию, то нужно использовать одинарные или двойные кавычки, чтобы сохранить пробелы внутри строки.
Для решения проблемы с обрезанием пробелов при передаче аргумента в функцию, вам следует:
- Проверить код вашей функции на наличие вызовов trim() или preg_replace() с шаблоном, который удаляет пробелы.
- Убедиться, что при передаче аргумента в функцию вы используете правильные кавычки для строк.
- Проверить другие манипуляции с аргументом, которые могут привести к удалению пробелов.
Приведу пример использования функции с передачей аргумента без обрезания пробелов:
function myFunction($arg) { echo $arg; } $argument = "Пример строки с пробелами "; myFunction($argument);
Если после выполнения этих шагов проблема не будет решена, пожалуйста, предоставьте больше информации о вашем коде, чтобы мы могли вам помочь более конкретно.