要素の配列を操作して文字列のシーケンスを動的に作成し、算術演算手順を作成したい。
for name in FIRST SECOND THIRD FOURTH FIFTH; do
$name = $(( $6 + 1 ))
$name = "${$name}q;d"
echo "${$name}"; printf "n"
done
$6
の場合、希望の結果は次のようになります。 と等しい 。
1q;d
2q;d
3q;d
4q;d
5q;d
しかし、このエラーが発生します
reel_first_part.sh: line 18: FIRST: command not found
reel_first_part.sh: line 19: ${$name}q;d: bad substitution
reel_first_part.sh: line 18: FIRST: command not found
reel_first_part.sh: line 19: ${$name}q;d: bad substitution
reel_first_part.sh: line 18: FIRST: command not found
reel_first_part.sh: line 19: ${$name}q;d: bad substitution
簡単なことだと思います。
のようなことをしたときに機能していましたFIRST=$(( $6 + 1 ))
FIRST="${FIRST}q;d"
承認された回答:
まず第一に、=
の周りにスペースを入れることはできません bash
の変数宣言 。
必要なものを取得するには、eval
を使用できます 。
たとえば、あなたのようなサンプルスクリプト:
#!/bin/bash
i=0
for name in FIRST SECOND THIRD FOURTH FIFTH; do
eval "$name"="'$(( $i + 1 ))q;d'"
printf '%sn' "${!name}"
i=$(( $i + 1 ))
done
プリント:
1q;d
2q;d
3q;d
4q;d
5q;d
eval
を使用する 慎重に、正当な理由でそれを悪と呼ぶ人もいます。
declare
うまくいくでしょう:
#!/bin/bash
i=0
for name in FIRST SECOND THIRD FOURTH FIFTH; do
declare "$name"="$(( $i + 1 ))q;d"
printf '%sn' "${!name}"
i=$(( $i + 1 ))
done
また、印刷します:
1q;d
2q;d
3q;d
4q;d
5q;d