Функция рекурсии в оболочке

вы можете попробовать эту команду

вы можете ввести дату в формате yyymmdd в команде awk

ls *.txt > all_files.txt
awk -F_ -vin_date="20160427" '{split($2,a,"-");date=a[1]a[2]a[3];if(date+0<in_date)print}' all_files.txt
1
16.04.2019, 18:51
2 ответа

Проблема не в том, что ты прикасаешься $2, а в том, что ты echoвещи. Ваша функция, как вы говорите, рекурсивна. Это означает, что он будет обрабатывать свой собственный вывод. Как только вы распечатаете что-либо, кроме единственного числа возврата (, чего вы ожидаете ), он сломается.

В частности, ваша функция будет делать это:

    tmp=$(( $2 - 1 ))
    local result1=$(exp $1 $tmp )
    result=$(( $result1 * $1 ))
    echo $result 

Это прекрасно работает, когда вывод exp $1 $tmp, сохраненный как result1, представляет собой просто одно число. Однако, когда вы повторяете что-то еще, вывод expбольше не является одним числом, поэтому простые математические операции, которые вы выполняете, сломаются.

2
27.01.2020, 23:30

Вызовите exp 3 0, сохраните его как result1и спросите себя, имеет ли смысл $(( $result1 * $1 ))сейчас.

Функция ожидает, что она напечатает одно число. Вы заставляете его печатать(echo)два числа. В какой-то момент result1содержит два числа, и тогда result=$(( $result1 * $1 ))является синтаксически неверным.

2
27.01.2020, 23:30

Теги

Похожие вопросы