Записать импортируемый массив в файл в Bash?

Я пытаюсь сделать систему высокой оценки для игры, над которой я работаю в Bash. До сих пор я придумал систему, в которой я пишу один массив в файл, а затем просто возвращаю его обратно. В настоящее время я пытаюсь выяснить, как записать массив в файл, чтобы он легко мог использовать источник.

проблема в том, когда я Эхо мой массив в файл, он вторит" ${рекорды [@]} " буквально вместо того, что находится внутри массива рекордов. Код как следует:

 #!/bin/bash
 #TODO Input an array from a file, read input from user, test if it's larger than any of the top 10, add it in there accordingly.
 #TODO Make it handle multiple high scores.
 num=0
 read -rp "enter score: " score
 if [ -f test.test ]; then
     . test.test
     for i in "{highscores[@]}"; do
         if [[ $score > $i ]]; then
             num=$((num+1))
             IFS=$'n' highscores=($(sort <<<"${highscores[*]}"))
             highscores[$num]="$score"
             rm test.test #probably not best way of doing this
             echo 'highscores=( `"${highscores[@]}"` )' >> test.test

         else
             highscores+=("$score")
         fi
     done
     else
         highscores=( "$score" )
         echo 'highscores=( `"${highscores[@]}"` )' >> test.test
 fi

Я специально забо

echo 'highscores=( `"${highscores[@]}"` )' >> test.test

несмотря на обратные ссылки, он по-прежнему не выводит содержимое массива. Вместо этого он буквально повторяет файл:

highscores=( "${highscores[@]}" )

Если у кого-то есть более простой или ясный способ сделать это, это тоже сработает!

1
задан Egrodo
16.01.2023 0:43 Количество просмотров материала 3185
Распечатать страницу

1 ответ

это не так, как работают обратные ссылки. Backticks запустить команда между ними и расширить его выход. Если вы просто поместите туда переменное расширение, оболочка все равно попытается run расширенное значение как команда в любом случае.

кроме того, ни обратные кавычки, ни расширения переменных не работают вообще внутри строк с одинарными кавычками.

то, что вы пытались сделать, может быть записано как:

echo "highscores=( ${highscores[*]} )" > test.test

echo "highscores=(" "${highscores[@]}" ")" > test.test

но вместо этого вы можете просто использование:

declare -p highscores > test.test
1
отвечен grawity 2023-01-17 08:31

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх