私はZSHをメインシェルとして使用しており、ランダムに配列にアクセスしようとしています。人々が電話を続けているのを見るのにfeh
注文はありません。私も持っていますが_feh
、同じものなのか、コマンドが何なのかはわかりません。
参照は次のとおりです。
FILES=( .../files/* )
feh $FILES[$RANDOM%$#FILES+1]
私のテストは次のとおりです。
test=(a b c); feh ${test[$RANDOM]}
参考までにOSX 10.10.xを使用しています。結局私はこれを私が所有しているいくつかのホストへのSSHアクセスをランダムに指定するために使用します。
ベストアンサー1
feh
はイメージビューアです。その部分は無視してください。 2番目の部分だけが必要です。
デフォルトでは、任意の配列要素にアクセスするには、次のものが必要です。つまり${arr[${ri}]}
、配列の任意のインデックスでなければなりません。ri
$(( $RANDOM % ${#arr[@]} + 1))
ri
arr
今までの乱数で解析します$RANDOM % N
。この場合、配列の長さ(要素の数)ですが、配列インデックスはinで始まるので、toの値を返すには必ず()を追加する必要があります。0
N-1
N
${#arr[@]}
1
zsh
+ 1
$(( $RANDOM % ${#arr[@]} + 1 ))
1
N
たとえば、配列の任意の要素を印刷する場合:
print -r -- ${arr[$(( $RANDOM % ${#arr[@]} + 1 ))]}
あるいは、簡単に言えば、配列インデックスは算術式で解析されます。
print -r -- "$arr[RANDOM % $#arr + 1]"
cshスタイルの構文を使用している場合(拡張子を中括弧で囲んでいない場合)、下付き文字を解析するために引用符が必要です。または(kshスタイル)zsh
で作成できます。$arr[RANDOM%$#arr+1]
${arr[RANDOM % $#arr + 1]}