こんにちは。ファイルから読み込まれた行を更新するスクリプトを作成しようとしていますが、最後に述べた次の行を除いて、これまですべてがうまく機能しています。
これは私のスクリプトです。
#!/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
中間インデックスの割り当てです。123
array
array[$i]="abc"
これは、呼び出されたコマンドarray[123]
(またはglobパターンに一致するファイル名が見つかった場合の結果)を実行しようとします。
array[$i] = "abc"
また、使用する${array[@]}
かどうかにかかわらず、を使用する!
たび:n:m
に引用符を付けたい場合があります。引用符がない場合、配列値はトークン化の影響を受けますが、引用符がある場合はそうではありません。
たとえばfor token in ${NAMES[@]:1}
、for .. in ${!ROWS_ARRAY[@]}