find . -name '*.html' | while read a; do mv $a ${a%.html}.htm; done
4. Как обратиться к параметру номер i , если i не константа, а переменная?
Можно подумать, что это легко и можно написать ${$i}, но это не сработает, и вам напишут bad substitution.
Примечание. Начиная с BASH 2.0 можно использовать конструкцию ${!i}.
Зато можно построить конструкцию следующего вида:
eval "param=\${$i}"
echo "Parameter number $i is $param"
А вот программа, которая выводит все свои параметры в обратном порядке, (C) 1997 ГС:
i=$#
while let I
do
eval "echo \${$i}"
i=$[i-1]
done
5. Какая последняя версия BASH?
Последняя, на момент написания данного текста, версия bash - 2.05. Она почти не отличается от 2.0, зато довольно сильно отличается от версии 1.14.7, предшествующей 2.0. Новые возможности по сравнению с 1.14.7:
· зарезервированное слово time для вычисления времени выполнения программы;
· одномерные массивы;
· новые виды экспансии: ${param:length:offset}, ${param/pat/replace-to};
· новые команды disown и shopt;
· новые виды кавычек для locale-specific translations, обозначения $'...' и $"...";
· ссылки на переменные: {$! param_name } будет вычислена переменная с именем, хранящимся в $ param_name (в старом для этого нужен eval).
6. Чем BASH отличается от SH ?
В SH отсутствуют следующие возможности BASH:
· новые возможности BASH 2.0 (см. выше);
· long named options (для вызова BASH);
· отрицание!;
· слово function (в некоторых реализациях sh это слово есть);
· команда select;
· обращение к параметрам больше девятого ${10};
· длина параметра ${#param}, "редактирование" ${var#str}, ${var%str};