私のスクリプトでは、ユーザーに入力を求めていくつかの変数に保存します。変数に文字列を使用する前に、長すぎる場合は切り捨て、最後に省略記号を追加します。 したがって、すべての変数を配列に入れて、ループとifステートメントでそれらを送信し、配列内の変数に新しい値を再割り当てします。私は多くの方法を試してきたし、誰も働いていない。以下は例です:ループスルー配列、配列内の変数に新しい値を代入する
preset1="Short string"
preset2="Not long very string"
preset3="A very long string here which we will then cut"
presets=("${preset1}" "${preset2}" "${preset3}")
for x in "${presets[@]}"; do
if [[ "${#x}" -gt 20 ]]; then
y="${x:0:20}..."
presets[$x]="$y"
fi
done
助けてください!
これと次の解の作業ですが、変数 '$ {preset3}'は変更されません。 'bash -x'を使うと、文字列がカットされ、省略記号が追加されたことがわかりますが、' echo $ {preset3} 'を実行すると変数の値が更新されないことがわかります。 – vato
@vatoそして、なぜあなたはそれをやりたいのですか?配列項目を十分に変更していないのですか? – PesaThe
@vatoまた、 'read'を使って配列を直接使うこともできます:' IFS = read -r 'array [0]' '。変数はまったく必要ありません。それがあなたのためにもっと便利な場合は、配列を保つだけです。 – PesaThe