다른 스크립트 실행 사이의 연관 배열을 기억하고 싶습니다. 지금까지 내가 얻은 것은 키/값 쌍이 포함된 텍스트 파일이 있다는 것입니다.
(
[james]=bond
)
연관 배열에 로드하고 추가한 다음 두 번째 파일로 리디렉션할 수 있는 방식으로 다시 에코하는 스크립트입니다.
#!/bin/bash
file=`cat $1`
key=$2
value=$3
declare -A row="$file"
row[$key]=$value
echo "("
for server in "${!row[@]}"
do echo "[$server]=${row[$server]}"; done
echo ")"
그런 다음 실행할 수 있습니다.
./arrays.sh file1 honey rider > file2 ; mv file2 file1
주다
(
[james]=bond
[honey]=rider
)
그런데 엄청 커보이네요. 이를 수행하는 더 깨끗한 방법이 있습니까?
답변1
In은 변수 정의를 해석 가능한 쉘 코드로 덤프하는 데 사용될 수 있으므로 다음을 사용하여 파일을 업데이트할 수 있습니다 bash
.declare -p
#! /bin/bash -
file=${1?}; shift
declare -A row
source -- "$file" || exit
while [ "$#" -ge 2 ]; do
row[$1]=$2
shift 2
done
declare -p row > "$file"
LC_CTYPE
파일이 동일한 로케일(적어도 동일한 카테고리)에서 생성되고 소스되는 것이 중요합니다 .
파일 내용을 표시하는 스크립트는 다음과 같습니다.
#! /bin/bash -
file=${1?}; shift
declare -A row
source -- "$file"
for i in "${!row[@]}"
do
printf 'key : %s\n' "$i"
printf 'value: %s\n' "${row[$i]}"
done