LINUX.ORG.RU

Декларация функции в bash

 , ,


0

2

Столкнулся со странностью недавно. Везде в интернетах пишут, что функцию в bash можно объявить разными способами, в том числе при помощи ключевого слова function перед названием функции. Именно такой способ мне больше всего нравится, и я решил им воспользоваться. Однако, не сработало.

Долго рылся в гугле, где-то видел пометку, что якобы function работает не во всех средах и т.п. Но это звучит как-то странно. Неужели в Ubuntu какая-то особая среда и т.п. Это ведь обычный дистрибутив Linux, один из самых популярных. Чего там может быть «особого»?

Например,


filetype_is1 () {
			echo $(file "$a" |  cut -d ":" -f 2 | cut -d " " -f 2)	
		}

— сработало замечательно.

А вот так,

function filetype_is1 {
....
}

— вызвало ошибку (ссылка на неправильно поставленные скобки, что-то такое …).

Вопрос: у всех так? Почему первый способ работает, а второй - нет? Может подскажете ресурс, где хорошо объясняется эта тема? Перелопатил разных сайтов (англоязычных, естественно) штук 7-8. Вроде всё понятно объясняется, но не работает. Может действительно в bash это ключевое слово уже не используется, или что?

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

В функции указана переменная, которая объявлена циклом. Исходил из того, что «лошадь идёт впереди телеги», а не наоборот.

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

function filetype_is {				
     file "$1" |  cut -d ":" -f 2 | cut -d " " -f 2
}		

а в цикле вызывал бы еЯ как:

filetype_is "$a" 

ну или как ты сейчас но с аргументом:

$(filetype_is "$a")

Это сделает твой код куда менее вовном чем он сейчас, и от некоторых сюрпризов избавит. То что остальное - не оптимально - ерунда, ты всё равно это чаще раза в день не запускаешь небось, а вот с функцией - это пока потенциальная проблема, при любом чихе перерастающая в реальную.

Код работает отлично.

Ты уже 8 километров бежишь за нами… Работает у него отлично…

Какие проблемы?

Я расписал какие, на уровне «для малышей». Просто попробуй. А потом по-черепи(С) над этим. Станет понятно для чего функции вообще.

У тебя личная неприязнь к функциям, или что?

У меня то? :-) Это вообщето - ты, кто даже простейшую конструкцию - функцию, применить «не шмогла» правильно, а виноваты все другие?

Так же забавно что все Ыгсперты в этом треде вот этого вопиющего мисюза тоже не увидели. Видимо тех кто и в правду на баше пишет тут уже не осталось :(

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

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

Вот и надо избегать at any cost(C)

атмта. тогда вообще ничего сделано не будет. для скриптоты тем более пойдет.

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

правда я не знаю как тело функции можно праметризовать (без eval). типа чтобы шаблонов/макросов наопределять таким способом, вызвать произвольный код который их использует, на следующей итерации переопределить шаблоны, вызвать код еще раз и тд.

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

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

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

Да всё уже сделал в лучшем виде, смотри последнее сообщение. Мир не без добрых людей, подсказали. А твои идеи на грани безумия, не обижайся. Подозреваю, что ты либо бот, либо общаешься через ChatGPT. Не спорю, ИИ иногда полезен при программировании, но с этим нельзя перебарщивать. Умей остановиться. Без этого умения можно не только 8 км пробежать.

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

Да нормально, уже разобрались, скрипт теперь работает безупречно. Bash хорош как инструмент. Всё надо изучать, но не на всё есть время, к сожалению.

Desmond_Hume ★★★★★
() автор топика