특정 인덱스의 배열에 값 할당

특정 인덱스의 배열에 값 할당

안녕하세요. 파일에서 읽은 줄을 업데이트하는 스크립트를 작성하려고 하는데, 마지막에 언급된 다음 줄을 제외하고는 지금까지 모든 것이 잘 작동하고 있습니다.

이것은 내 스크립트입니다.

#!/bin/bash     

#INITIALIZE PATHS
DB_PATH=${1}      
DATA_PATH="$DB_PATH/data/"
METADATA_PATH="$DB_PATH/metadata"   

#LOAD THE META DB FILE AND READ DATABASE NAME IN DB_NAME 
#READ ALSO COLUMNS IN AN ARRAY CALLED TABLE_NAMES                      
METADATA_LOAD=$(<"$METADATA_PATH/DB")
IFS=$'+'
read -a NAMES <<< "$METADATA_LOAD"



#PROMPET FOR TABLE TO UPDATE
echo ""
echo ""
echo ""
echo "You Currently Working with Database ${NAMES[0]}" 
echo ""
echo "You Have The Following Tables to Choose From :"
IFS=' '
for token in ${NAMES[@]:1}
do
echo "  $token"
done
echo ""
echo ""
echo ""
echo "Please Write The Name Of The Table You Want To Update :"
read CURRENT_TABLE


#Form META DATA TABLE FILE PATH
TABLE_DATA_PATH="$DB_PATH/data/$CURRENT_TABLE"
TABLE_METADATA_PATH="$DB_PATH/metadata/$CURRENT_TABLE"


#PROMPET WHICH COLUMN IS NEEDED TO CHECK FOR EQUALITY
echo ""
echo ""
echo ""
echo "The Table You Selected Have The Following Columns"
i=0 
TABLE_METADATA=$(<"$TABLE_METADATA_PATH")
IFS='+'
read -a CURRENT_TABLE_META <<< "$TABLE_METADATA"
IFS=' '
for token in ${CURRENT_TABLE_META[@]:1}
do
i=$(($i+1))
echo $i $token
done
echo "Please Enter The Number Column to Check For Equality"
read TEST_COLUMN_NUM
echo ""
echo ""
echo "Please Enter The Column Value to Check For Equality"
read TEST_COLUMN_VAL

echo "Please Enter The Column Number to Modify"
read MODIFY_COLUMN_NUM

echo "Please Enter The New Column Value"
read MODIFY_COLUMN_VAL

#Form DATA TABLE FILE PATH
TABLE_DATA=$(<"$TABLE_DATA_PATH") 


IFS=' '
read -a ROWS_ARRAY <<< "$TABLE_DATA"  




for CURRENT_ROW_INDEX in ${!ROWS_ARRAY[@]}
do

  IFS=':'
  read -a COLUMNS_ARRAY <<< "${ROWS_ARRAY[CURRENT_ROW_INDEX]}"

   for CURRENT_COL_INDEX in ${!COLUMNS_ARRAY[@]} 
   do

       if [[ ${COLUMNS_ARRAY[$CURRENT_COL_INDEX]} == $TEST_COLUMN_VAL  &&  $CURRENT_COL_INDEX -eq $(($TEST_COLUMN_NUM-1)) ]]
       then

           IFS=' '
           COLUMNS_ARRAY[$MODIFY_COLUMN_NUM] = "ABC"



       fi   

   done
done

아직 스크립트를 완료하지 않았지만 다음 줄에서 오류가 발생합니다.

 COLUMNS_ARRAY[$MODIFY_COLUMN_NUM] = "ABC"

그것은 나에게 오류를 준다

./업데이트: 91행: COLUMNS_ARRAY[3]: 명령을 찾을 수 없습니다.

이전 값을 대체하여 지정된 인덱스의 배열에 할당하고 싶습니다. 오류의 원인과 해결 방법을 이해하도록 도와주세요.

답변1

셸에서 일반 변수 할당과 동일하지만 =.

주어진 경우, 이것은 i=123중간 인덱스에 대한 할당입니다:123array

array[$i]="abc"

이는 호출된 명령 array[123](또는 glob 패턴과 일치하는 파일 이름이 발견된 경우 결과)을 실행하려고 시도합니다.

array[$i] = "abc"

또한, 또는 사용 ${array[@]}여부에 관계없이 !를 사용할 때마다 :n:m주위에 따옴표를 붙이고 싶을 수도 있습니다 . 따옴표가 없으면 배열 값은 토큰화의 영향을 받지만 따옴표가 있으면 그렇지 않습니다.

예를 들어 for token in ${NAMES[@]:1},for .. in ${!ROWS_ARRAY[@]}

관련 정보