LINUX.ORG.RU

История изменений

Исправление 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»

Тогда я не пойму для чего нужно это