set -A 命令不在 Linux 中运行

set -A 命令不在 Linux 中运行
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

上面的代码补丁在 AIX 中运行良好,但是当我尝试在 Linux 中运行相同的代码时,出现以下错误:

set: -A: invalid option
set: usage: set [--abefhkmnptuvxBCHP] [-o option-name] [arg ...]

答案1

这是因为在 Linux 中,默认用户 shell 通常是bash,并且/bin/sh经常符号链接到/bin/bash(在 Redhat 基础发行版上)或/bin/dash(在 Debian 和 Ubuntu 基础发行版上)。

声明数组set -Aksh语法,首先在 中实现ksh88,并且在ksh93pdksh及其派生词和中也受支持zsh

您可以切换到其他数组语法,并且 和 都ksh支持bash

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

或使用斯蒂芬·查泽拉斯 (Stéphane Chazelas) 就在这里

相关内容