zshで位置パラメータに整数値を割り当てることはできますか?

zshで位置パラメータに整数値を割り当てることはできますか?

zshのマニュアルを読んでいますが、次のようにパラメータに整数値を割り当てることができます。

(( val = 1 ))

たとえば、スクリプトを呼び出して最初の引数が整数の場合、再割り当て、./scirpt.zsh $((val))比較などの算術プロセスを実行するためにスクリプトでこれをどのように参照しますか?コードを次のように作成したいと思います。

#!/bin/zsh

(( {1} = $1++ ))

答え1

zshでは、配列変数argv位置パラメータにアクセスする別の方法です。だから:

((argv[1]++))

答え2

補う@gilsの答え、位置パラメータに値を割り当てることもできます外部たとえば、算術式1=valueに最初の位置パラメータを追加するには、次のようにします。

1=$(($1 + 1))

ただし、厳密に言うと、$1文字通りの数値定数(例a=++x:)だけでなく、任意の算術式を含めることができる場合は、1=$((($1) + 1))2つが同じでなければなりません。比較する:

$ x=4 zsh -c '((argv[1]++)); echo "$1 $a $x"' zsh a=++x
6 5 5
$ x=4 zsh -c '1=$(($1 + 1)); echo "$1 $a $x"' zsh a=++x
6 6 5
$ x=4 zsh -c '1=$((($1) + 1)); echo "$1 $a $x"' zsh a=++x
6 5 5

$varこれは、内部式の代わりにvar算術式を使用するときに発生する一般的な問題の1つです。持っていれば$1当然使えない1が、あればzsh使えるargv[1]

これらの複雑なケースに加えて、この問題は次の実際のケースでも発生します。

$ zsh -c 'echo $((1-$1))' zsh -3
zsh:1: bad math expression: operator expected at `3'

これは演算子1--3の誤った使用法になるからです--。次のいずれかの方法で問題を解決できます。

$ zsh -c 'echo $((1 - $1))' zsh -3
4
$ zsh -c 'echo $((1-($1)))' zsh -3
4
$ zsh -c 'echo $((1-argv[1]))' zsh -3
4

(最初はこのような値に対して異なる結果を提供しますが1 + 1)。


((argv[1]++))1 0と解釈されたときにゼロ以外の終了状態が返されることを無視すると$1

関連情報