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では、デフォルトのユーザーシェルが通常bash
(デフォルトのRedhatディストリビューションで)または(デフォルトのDebianおよびUbuntuディストリビューションで)/bin/sh
シンボリックリンクされているためです。/bin/bash
/bin/dash
配列宣言は で最初に実装された構文でありset -A
、その派生物でもサポートされています。ksh
ksh88
ksh93
pdksh
zsh
別の配列構文に切り替えることができ、両方がサポートされてksh
いますbash
。
set -f # turn off globbing
days=( $(cal "$month" "$year") )
または使用ステファン・シャジェラスが来ました。