История изменений
Исправление vachicul, (текущая версия) :
Это возврат из функции, с возможностью выставить $?
$? - это и есть возврат переменной в предыдущее состояние?
Нет, делает системный вызов stat и смотрит на возвращённую ядром информацию.
Не подходит, потому что программа просто выводит список
Что в таком случае сделает ls? А другая, более новая или более старая её версия?
Всё очень просто, программа выводит список в указанном каталоге (из своей базы данных):
$ program ls /parent/path
entry2
path2/
path3/
$ program ls /parent/path/path3
path4/
path5/
path6/
$
Во многих случаях это удобнее, чем вручную выставлять старое значение переменной перед возвратом из рекурсивного вызова.
Если это возможно, тогда не «во многих», а во всех случаях. Зачем писать лишний код если можно его не писать?
В результате получается, что функция принимает два аргумента или больше, первые два сохраняет в именованных локальных переменных $foo и $bar (кстати, у меня ошибка, связанная с нумерацией аргументов после операции shift), а все остальные - в массив «${parents[@]}», где их может быть 0 или натуральное число. Внутренние вызовы наращивают массив parents, сохраняя доступ ко всем родителям родителей, но с возвратом он автоматически становится короче.
Полезно, понятно. Но надо пробовать
Функциям можно передавать аргументы, как другим программам: f() { echo «My arguments: $*»; } f 1 2 3 «4 5 6»
Тогда я не пойму для чего нужно это
Исходная версия vachicul, :
Это возврат из функции, с возможностью выставить $?
$? - это и есть возврат переменной в предыдущее состояние?
Нет, делает системный вызов stat и смотрит на возвращённую ядром информацию.
Не подходит, потому что программа просто выводит список
Что в таком случае сделает ls? А другая, более новая или более старая её версия?
Всё очень просто, программа выводит список в указанном каталоге (из своей базы данных): [code=bash] $ program ls /parent/path entry2 path2/ path3/ $ program ls /parent/path/path3 path4/ path5/ path6/ $ [/code]
Во многих случаях это удобнее, чем вручную выставлять старое значение переменной перед возвратом из рекурсивного вызова.
Если это возможно, тогда не «во многих», а во всех случаях. Зачем писать лишний код если можно его не писать?
В результате получается, что функция принимает два аргумента или больше, первые два сохраняет в именованных локальных переменных $foo и $bar (кстати, у меня ошибка, связанная с нумерацией аргументов после операции shift), а все остальные - в массив «${parents[@]}», где их может быть 0 или натуральное число. Внутренние вызовы наращивают массив parents, сохраняя доступ ко всем родителям родителей, но с возвратом он автоматически становится короче.
Полезно, понятно. Но надо пробовать
Функциям можно передавать аргументы, как другим программам: f() { echo «My arguments: $*»; } f 1 2 3 «4 5 6»
Тогда я не пойму для чего нужно это