set -A comando não está sendo executado no Linux

1
if [ $UNITS = day ]; then

   while ((OFFSET > 0)); do
      if (( OFFSET >= day )) ;then
         month=$((month - 1))
         if (( month == 0 )) ;then
            year=$((year - 1))
            month=12
         fi
         set -A days 'cal $month $year'
         OFFSET=$((OFFSET - day))
         day=${days[$(( ${#days[*]}-1 ))]}
      else
         day=$((day - OFFSET))
         OFFSET=0
      fi
   done

O patch de código acima está funcionando bem no AIX, mas quando estou tentando executar o mesmo no Linux, estou recebendo o erro abaixo:

set: -A: invalid option
set: usage: set [--abefhkmnptuvxBCHP] [-o option-name] [arg ...]
    
por user131990 11.11.2015 / 09:08

1 resposta

1

Isso porque, no Linux, o shell padrão do usuário é geralmente bash , e o /bin/sh foi muitas vezes linkado a /bin/bash (no Redhat base distro) ou /bin/dash (no Debian e Ubuntu base distro). / p>

Declarando a sintaxe% de matrizset -A é ksh , implementada pela primeira vez em ksh88 e também suportada em ksh93 , pdksh e suas derivadas e zsh .

Você pode alternar para outra sintaxe de matriz, compatível com ksh e bash :

set -f # turn off globbing
days=( $(cal "$month" "$year") )

ou usando um de Stéphane Chazelas aqui .

    
por 11.11.2015 / 09:39