Bash脚本实现备份还原时数组赋值报错invalid arithmetic operator如何解决
问题原因
你遇到的报错是因为declare -a声明的是普通索引数组,仅支持整数类型的下标。当你传入package.json这类带特殊字符的字符串作为键时,Bash会尝试将字符串解析为算术表达式,因此触发了syntax error: invalid arithmetic operator报错。
解决方案
Bash 4.0及以上版本支持关联数组(也就是你需要的字典类型),支持字符串作为键,只需要修改声明语句即可:
- 将原有声明
declare -a test_dict修改为declare -A test_dict,注意参数A必须大写。 - 原有赋值逻辑无需修改,变量引用建议加双引号,避免路径带空格时出现异常。
可运行的完整示例代码
# 声明关联数组(字典) declare -A test_dict FILE="path/to/package.json" BASENAME=$(basename "$FILE") key="$BASENAME" value="$FILE" test_dict[$key]="$value" # 打印所有存储的路径值 echo "所有路径:${test_dict[*]}" # 遍历打印所有键值对 echo "===== 存储明细 =====" for key in "${!test_dict[@]}"; do echo "文件名:$key,对应原路径:${test_dict[$key]}" done
备选方案(使用普通数组实现)
如果你的运行环境不支持关联数组,可以同时维护两个普通索引数组,分别存储文件名和对应路径,通过相同的整数下标关联:
declare -a file_name_list declare -a file_path_list FILE="path/to/package.json" BASENAME=$(basename "$FILE") # 追加元素到数组末尾 file_name_list+=("$BASENAME") file_path_list+=("$FILE") # 遍历取值 for idx in "${!file_name_list[@]}"; do echo "文件名:${file_name_list[$idx]},对应原路径:${file_path_list[$idx]}" done
内容的提问来源于stack exchange,提问作者muiraie
相关产品推荐
相关产品推荐

