LINUX.ORG.RU

Работа со строками в BASH / Проблема

 


0

2

Проблема с обработкой строк.

У меня есть строка: ${line:0:$i}, – в которой я ищу пробел, для того, чтобы поместить его в переменную $space.

Как определить, что в переменную помещен пробел?

Проверка:

[ -z "$space" ] && echo Yes

не работает. Использование [ «$space» = " " ] тоже безрезультатно.

Как правильно работать с пробелами?



Последнее исправление: Cl_Magenta (всего исправлений: 4)
Ответ на: комментарий от Cl_Magenta

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

vodz ★★★★★
()
Ответ на: комментарий от vodz

Я мог бы расписать подробно, но учитывая то, что ты бездоказательно утверждаешь, что говорит о твоем интеллектуальном уровне, тратить на это время я не буду. Ограничусь только тем, что ты очевидно неправ.

anonymous
()
Ответ на: комментарий от anonymous

но учитывая то, что ты бездоказательно утверждаешь,

Ну то есть и второй раз не смогли выполнить домашнее задание.

vodz ★★★★★
()
Ответ на: комментарий от vodz

Не переживай. Никто и не ожидал, что человек в 50 лет, страдающий подростковым максимализмом и узколобостью, сможет признать свои ошибки. Ничего страшного.

anonymous
()
Ответ на: комментарий от anonymous

что человек в 50 лет, страдающий подростковым максимализмом и узколобостью ... сможет признать свои ошибки

Кстати, когда сидишь в сети больше, чем кто живёт на этом свете, все эти детсадовские штучки с сам дурак совсем не действуют. Попробуйте тоньше. А так, типичное отзеркаливание.

И я дочитал до конца стартовую месагу. На самом деле ты, аноним, облажался трижды. Ибо ТСовое [ "$space" = " " ] как раз валидное (но не идеальное, что — другой вопрос) и если не работает, то ровно то и означает, что $space не равно одному пробелу.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
rain@walkbook:~$ var='123_123'
rain@walkbook:~$ [[ "${var}" =~ ' ' ]] && echo Y
rain@walkbook:~$ var='123 123'
rain@walkbook:~$ [[ "${var}" =~ ' ' ]] && echo Y
Y
rain@walkbook:~$ var='123_123 '
rain@walkbook:~$ [[ "${var}" =~ ' ' ]] && echo Y
Y



Оно?

YAR ★★★★★
()

как же питон хорош

x = ' ' in string

anonymous
()
Ответ на: комментарий от anonymous

2020 год. Использовать околоPython религия не позволяет?

2010 год: использовать perl религия не позволяет? 2030 год: а bash как был так и остался живее всех.

vodz ★★★★★
()

Старый трюк:

[ X" " = X"$space" ] && echo yes
beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 2)
Ответ на: комментарий от vodz

2010 год: использовать perl религия не позволяет? 2030 год: а bash как был так и остался живее всех.

Засчитано. :(

anonymous
()
Ответ на: комментарий от YAR

[[ "${var}" =~ ' ' ]] && echo Y

Кстати, это медленно. Про кавычки для $var у первого аргумента в [[ ]] похоже бесполезно говорить, только нервы тратить. Вот так, наверное, быстрее будет, причём вторая проверка точно проверит, что пробел ровно один:

[[ ${var} = *\ * ]]
или
[[ ${var//[^ ]/} = ' ' ]]
vodz ★★★★★
()
Ответ на: комментарий от vodz

Про кавычки для $var у первого аргумента в [[ ]] похоже бесполезно говорить

А что с кавычками? Думал, стоит явно указать один из аргументов в [[]], чтобы не было зависимости от того, что в самой переменной. В свою очередь считал, что примеры выше с оператором присвоения вместо сравнения (==) ошибочны, но проверил - все работает. Похоже, bash более вольно обращается с содержимым скриптов.

пробел ровно один

У ТСа вроде такая задача не стояла.

YAR ★★★★★
()
Ответ на: комментарий от YAR

А что с кавычками?

В непонимании, зачем собственно придуман синтаксис [[ ]] вместо [ ].

У ТСа вроде такая задача не стояла.

Вы русский хорошо понимать? Я разве говорил, что правильно использовать только тот вариант? Я сказал, что этот вариант имеет полезное свойство и может пригодиться если что.

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.