"Частые ошибки программирования на Bash" (часть 1 (http://bappoy.pp.ru/2008/12/13/bash-pitfalls-part01.html), часть 2 (http://bappoy.pp.ru/2008/12/18/bash-pitfalls-part02.html)) - перевод статьи Bash Pitfalls (http://wooledge.org:8000/BashPitfalls), в которой описаны некоторые подводные камни и ошибки программистов при составлении Bash скриптов.URL: http://bappoy.pp.ru/2008/12/18/bash-pitfalls-part02.html
Новость: http://www.opennet.me/opennews/art.shtml?num=19486
cat /etc/passwd | ( a(){count=0;
while read line ;
do
((count++));
done;
echo "total number of lines: $count";
return $count;}; a;); count=$?; echo $count;Опа! :)
И к чему это "опа" относилось? К "{count=0;"?
# cat /etc/passwd | ( a(){ while read line; do ((count++)); done; echo "total number of lines: $count"; return $count;}; a;); count=$?;echo $count;
>И к чему это "опа" относилось? К "{count=0;"?$ ((count++)); echo $count
1
$ ((count++)); echo $count
2
$ ((count++)); echo $count
3
$ ((count++)); echo $count
4
$ yes|head -257 | ( a(){ while read line; do ((count++)); done; echo "total number of lines: $count"; return $count;}; a;); count=$?;echo $count;
total number of lines: 261
5
$ yes|head -257 |wc -l
257
$ _Неужели к недоступности wc на уних-пазих-пла-атформе? :))
У возвращаемого программой значения берутся только 8 младших битов. Так что здесь всё правильно: 261-256=5.А count внутри ( ) установлен изначально уже не в 0, а в 4.
Лучше бы написали про bash'измы и необходимость их избегать, в том числе [[ и ==
Sorry, программирование на bash - конечно круто, но нужно помнить о кроссплатформенности! многие вещи в обычном sh не работают!
Проблемы индейцев?"""Поборники переносимости http:/openforum/vsluhforumID9/7769.html#9 допиливают пиломатериал напильником в сторонке. Без перекуров. :-P"""
И вообще, какие проблемы к переносимости _ошибок_ програмировния, ась?!! 8-)