вы можете попробовать эту команду
вы можете ввести дату в формате 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
Проблема не в том, что ты прикасаешься $2
, а в том, что ты echo
вещи. Ваша функция, как вы говорите, рекурсивна. Это означает, что он будет обрабатывать свой собственный вывод. Как только вы распечатаете что-либо, кроме единственного числа возврата (, чего вы ожидаете ), он сломается.
В частности, ваша функция будет делать это:
tmp=$(( $2 - 1 ))
local result1=$(exp $1 $tmp )
result=$(( $result1 * $1 ))
echo $result
Это прекрасно работает, когда вывод exp $1 $tmp
, сохраненный как result1
, представляет собой просто одно число. Однако, когда вы повторяете что-то еще, вывод exp
больше не является одним числом, поэтому простые математические операции, которые вы выполняете, сломаются.
Вызовите exp 3 0
, сохраните его как result1
и спросите себя, имеет ли смысл $(( $result1 * $1 ))
сейчас.
Функция ожидает, что она напечатает одно число. Вы заставляете его печатать(echo
)два числа. В какой-то момент result1
содержит два числа, и тогда result=$(( $result1 * $1 ))
является синтаксически неверным.