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 -A
是ksh
语法,首先在 中实现ksh88
,并且在ksh93
、pdksh
及其派生词和中也受支持zsh
。
您可以切换到其他数组语法,并且 和 都ksh
支持bash
:
set -f # turn off globbing
days=( $(cal "$month" "$year") )