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

416
Egrodo

Я пытаюсь создать систему рекордов для игры, над которой я работаю в 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 ""; do if [[ $score > $i ]]; then num=$((num+1)) IFS=$'\n' highscores=($(sort <<<"$")) highscores[$num]="$score" rm test.test #probably not best way of doing this echo 'highscores=( `"$"` )' >> test.test  else highscores+=("$score") fi done else highscores=( "$score" ) echo 'highscores=( `"$"` )' >> test.test fi 

Часть, которую я специально согласен

echo 'highscores=( `"$"` )' >> test.test 

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

highscores=( "$" ) 

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

0

1 ответ на вопрос

1
grawity

Это не так, как работают спины. Обратные галочки запускают команду inbetween и расширяют до ее вывода . Если вы просто поместите расширение переменной туда, оболочка все равно попытается запустить расширенное значение как команду.

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

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

echo "highscores=( $ )" > test.test  echo "highscores=(" "$" ")" > test.test 

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

declare -p highscores > test.test 

Похожие вопросы