LINUX.ORG.RU

Маленький скрипт


0

0

Начал изучать ман по башу, но не могу понять как сделать что если есть в конце строки запятая то ее грохнуть, а если нету то не надо? Строки сгенерены в проге и разделены «\n». Помогите пожалуйста.

★★

Ответ на: комментарий от sdio

пример — показательно обучающщий :-) — такчто в данном контексте всё нормально :-) :-)

...но новечков bash — думаю сразу стоит приучать использовать <«> (ковычки) — везде где используется <$> (переменные) . ведь bash и это НЕ perl/php :-D . (((кроме тех случаев где заведомо <»> ипользовать не нада)))

т.е.:

echo "${a%%,}"

... ... ...

(ато ведь если им не показать на собственном примере — то они так и будут серъёзно писать в скриптах : чтото вроде

mv $file1 $file2
вместо того чтобы правильно написать
mv "$file1" "$file2"
)

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

Нотация ${variable} избавляет от необходимости брать переменные в кавычки, не? Параметр extquote установлен для этого по умолчанию.

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

не.. не избавляет...

незнаю что там поумолчанию.. но щаз проверил (очередной деститысячный раз) — без ковычек происходит разделение на несколько параметров...

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

> Завязывайте с олбанским

албанский тут не причём :-) .. просто лень после каждого слова — заглядывать в словарь Ожигова :-)

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

Нотация ${variable} избавляет от необходимости брать переменные в кавычки, не? Параметр extquote установлен для этого по умолчанию.

давайте ещё раз поподробнее, если не сложно.. :-)

вот я накатал пример:

#!/bin/bash

bash --version
echo -e "\n********** Начало **********\n"

the_file="мой маленький файлик.test"
the_info="тестовая информация для файла"

echo "$the_info" >"$the_file"

echo -e "\n********** Эксперимент #0 **********\n"
cat "$the_file" && echo "SUCCESS" || echo "FAIL"

echo -e "\n********** Эксперимент #1 **********\n"

cat ${the_file} && echo "SUCCESS" || echo "FAIL"

echo -e "\n********** Конец **********\n"

вот такой результат:

$ ./test_extquote.bash 
GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

********** Начало **********


********** Эксперимент #0 **********

тестовая информация для файла
SUCCESS

********** Эксперимент #1 **********

cat: мой: No such file or directory
cat: маленький: No such file or directory
cat: файлик.test: No such file or directory
FAIL

********** Конец **********

что там за пораметр «extquote» который якобы установлен гдето там поумолчанию? %) )% %)

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

вообще конешно может быть зря я ввязался в эту тему с башем...

...так как люди обычно пишут bash-скрипты чисто для себя, и если они там наделают багов — то это только их проблеммы

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

та маленькаая часть bash-программ (например система dkms . или система конфигурирования-инициализации в Gentoo) — обычно делается не с такими очевидными оплошностями как поголовное забывание проставления ковычек...

...а чуть-менее распространённые bash-программы, сделанные для общества (а не для только себя) — всегда приятнее заменить аналогами сделаннами на Python/Ruby/Perl/... [так как там-то уж авторы программ точно не станут извращщатсья со строками через sed и переменными через «хитрые» манипуляции] :-)

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

Да, действительно. Я даже нашёл у себя конструкции типа «${blah}». Напутал малость с той опцией.

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