Почему при передаче аргумента в функцию у него обрезаются пробелы?

Ссылка скопирована
1 ответ

Добрый день, я только начинаю свой путь в 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
Стас DB Ответ

Проблема, с которой вы столкнулись, связана с тем, что при передаче аргумента в функцию пробелы обрезаются. Это может быть вызвано различными причинами, и в данном ответе я постараюсь рассмотреть несколько возможных сценариев, которые могут привести к такому поведению.

1. Одной из причин может быть использование функции trim() внутри вашей функции. Функция trim() удаляет пробелы и другие символы с начала и конца строки. Если вы передаете аргумент в функцию после обработки функцией trim(), то все пробелы будут удалены.

2. Еще одной возможной причиной может быть использование функции preg_replace() с шаблоном, который удаляет пробелы. Например, если вы используете preg_replace('/\s+/','',$arg), то все пробелы будут удалены из аргумента.

3. Также стоит убедиться, что при передаче аргумента в функцию вы используете правильные кавычки. Например, если вы передаете строку в функцию, то нужно использовать одинарные или двойные кавычки, чтобы сохранить пробелы внутри строки.

Для решения проблемы с обрезанием пробелов при передаче аргумента в функцию, вам следует:

- Проверить код вашей функции на наличие вызовов trim() или preg_replace() с шаблоном, который удаляет пробелы.
- Убедиться, что при передаче аргумента в функцию вы используете правильные кавычки для строк.
- Проверить другие манипуляции с аргументом, которые могут привести к удалению пробелов.

Приведу пример использования функции с передачей аргумента без обрезания пробелов:

function myFunction($arg) {
    echo $arg;
}
 
$argument = "Пример строки с пробелами ";
myFunction($argument);

function myFunction($arg) { echo $arg; } $argument = "Пример строки с пробелами "; myFunction($argument);

Если после выполнения этих шагов проблема не будет решена, пожалуйста, предоставьте больше информации о вашем коде, чтобы мы могли вам помочь более конкретно.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно