Как стать автором
Обновить

Комментарии 22

Шедеврально! Сколько времени ушло на изобретение?) И да, с Наступающим!
Базовый принцип-то я быстро придумал (10—20 минут), а практический результат рождался дольше — потренировался на двух «hello world» ([1], [2]) и сделал этот скрипт :)
Да, «Баш», уважаемый Eugene Pankov.
Почему тогда не пиэйчпифак?
Тема отдельной статьи.
Можно ждать статью? Серьезно, интересно узнать в чем разница
Это вероятно. Эти мысли размазаны по комментариям моего блога, если будет время, соберу в статью.
Если так много исключений, может ваша теория неверна?
Потому что вы лингвистические зануды
Так в конце получается команда «cat<<<'Happy new year'», которую я и запускаю. Почему не «echo» или «printf»? Они просто длиннее — каждая лишняя буква это морока с переменными и операциями.


echo 'Happy new year' короче же на 1 символ? Да и можно без кавычек:

cat<<<'Happy new year'
echo Happy new year
Не буквенные и не цифровые символы-то нас не волнуют — их можно использовать непосредственно.
-bash-4.1# bash test.sh
test.sh: line 2: -${#___}: substring expression < 0
test.sh: line 3: bash64: command not found
test.sh: line 3: bash64: command not found
test.sh: line 4: bash64: command not found
test.sh: line 4: bash64: command not found
test.sh: line 4: bash64: command not found
test.sh: line 6: 0#: invalid number (error token is "0#")
test.sh: line 10: b: command not found
У меня 4.3.30. Я, к сожалению, не очень-то знаю какие возможности «баша» в какой версии появились.
Теперь еще бы tool в который кормишь текст, а на выходе получаешь код башфака.
Возможно займусь после праздников :)
А не проще был для получения цифр считать аргументы:
% bash -c $'__(){\n__=$#\n}\n__ ! + - \\\\;  echo $__'
4

? Я в первую очередь об этом подумал.

Кстати говоря, $(( )) и $[ ] — одно и то же. Но почему‐то все используют двойные скобки.
Возможно в каких-то случаях и проще, но цифры очень разные нужны. Вот тут, например, я получал число 17:

${#____}#$_____-${#___}

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

$ bash -c $'@(){ __=$#;};@ ! + - \\\\;  echo $__'
4

Но на практике обошёлся без них. Возможно, если создавать транслятор «любая строка → Bashfuck», эта идея очень пригодится.
Кстати говоря, $(( )) и $[ ] — одно и то же. Но почему‐то все используют двойные скобки.
Кому уж что нравится. :) Я, например, больше люблю использовать $(…), а не `…` и let вместо ((…)).
let я что‐то нигде не видел, а относительно $() есть объективные соображения: попробуйте вставить `` внутрь ``. Это возможно с экранированием, но очень неудобно.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории