+124.3
- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
[ $(echo $a|cut -c$((${#a}-1))-) = "gz" ] && echo "Hello, world!"
[ $(echo $a|sed "s/.*\(..\)/\1/") = "gz" ] && echo "Hello, world!"
echo $a|sed -e"s/.*gz$/Hello, world\!/" -et -eD
expr $a : .*gz >/dev/null && echo "Hello, world!"
[ $(expr $a : '.*\(..\)') = "gz" ] && echo "Hello, world!"
echo "ifelse(substr($a,eval(len($a)-2)),gz,\`Hello, world! ')"|m4
case $a in *gz) echo "Hello, world!";; esac
echo $a|emacs -batch -eval '(defun f (arg) "M") (if (string= (substring arg -2) "gz") (princ "Hello, world!\n")) )' -f f
2168-му посвящается...
Задача: Если последние два символа переменной "gz", то вывести "Hello, world!".
Решение проблемы от поклонников разных инструментов. awk, perl и всякие tcl не писал, поскольку там не будет говнокода.
11 строка, то, как обычно пишу я. ИЧСХ, все примеры, кроме последнего, строго соответствуют POSIX.2:)
Запостил: nil,
26 Ноября 2009
guest 26.11.2009 02:10 # +1
nil 26.11.2009 02:22 # 0
Но потом решил, что не надо, поскольку не совсем скриптовый код получается, а во-вторых, в стандарте прописано только наличие c99:)
Но да, можно!!!
guest 26.11.2009 03:23 # +2
Вообще, я сейчас посмотрел - есть ещё куча противоестественных способов решить сабжевую задачу из консоли, включая php, js (в кде входит кривоватый интерпретатор) и другое всякое:
А теперь самое мудаческое:
nil 26.11.2009 10:58 # 0
Да, про grep я забыл, хотя раньше именно так и использовал.
basename — однозначно рулез, в копилку!
Последнее вообще шикарно (stat — не стандарт), хотя если уж говнокодить и создавать файл, то можно как-то так (проверок на существование директорий, очистки и блабла не будет, потому что это говнокод:)):
mkdir tmpdir; touch tmpdir/$a; ls tmpdir/*.gz 2>&- >&-|| echo "Hello, world!"
А вообще да, манипулирование файлами открывает новую страницу в говнокодинге данного примера:)
nil 26.11.2009 10:59 # 0