前提・実現したいこと
シェルスクリプトで引数を配列名にしたい。
発生している問題・エラーメッセージ
関数で引き渡した引数を関数名にしてPOSCARelementsX..Zのように3つの配列を作成してX..Zの数値をそれぞれ用意したいのですが、引数$4を配列名につけようとするとエラーメッセージ
”./strain.sh: 行 24: POSCARelements[$4]: リストを配列要素に割り当てできません”
が表示されうまく行きません。どうすれば3つの配列にわけられるでしょうか?
X Percent: 3 3 X Interval: 5 5 minus or plus ?: plus HelloAt X Percent: 0.030 Interval: 0.006 1.0 ./strain.sh: 行 24: POSCARelements[$4]: リストを配列要素に割り当てできません
該当のソースコード
AtRegularIntervals(){ echo "HelloAt" echo "$4" wariai=`echo "scale=3; $POSCAR*($1*0.01)" | bc |awk '{if($0~/^./){print "0"$0}else{print $0}}'` echo "Percent: $wariai" kankaku=`echo "scale=3; $wariai/$2" | bc |awk '{if($0~/^./){print "0"$0}else{print $0}}'` echo "Interval: $kankaku" if [ $3 = plus ]; then for dankai in `seq 0 $Interval` do echo "$POSCAR" POSCARelements[$4]=("${POSCARelements[@]}"$POSCAR) POSCAR=`echo "scale=3; $POSCAR+$kankaku" | bc` done else for dankai in `seq 0 $Interval` do echo "$POSCAR" POSCARelements[$4]=("${POSCARelements[@]}"$POSCAR) POSCAR=`echo "scale=3; (($POSCAR - $kankaku))" | bc` done fi POSCAR=1.0 return 0 } #ここでX~Zの値の変動%と間隔、プラス方向マイナス方向を設定 for value in {X..Z}; do echo -n "$value Percent: " read Percent[$value] echo ${Percent[$value]} echo -n "$value Interval: " read Interval[$value] echo ${Interval[$value]} echo -n "minus or plus ?: " read Trancelate[$value] AtRegularIntervals "${Percent[$value]}" "${Interval[$value]}" "${Trancelate[$value]}" "$value" done
試したこと
evalなども試してみましたがうまく行きませんでした。
また、もし回答頂いた方で参考になるサイトやチュートリアルなどがあればお教えいただけると幸いです。(特に変数を他のコマンドに引き渡した時や、他の関数に投げた時の数値の引用方法がわかりません...。)
補足情報(FW/ツールのバージョンなど)
GNU bash, バージョン 4.3.48
回答2件
あなたの回答
tips
プレビュー