You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本实现备份还原时数组赋值报错invalid arithmetic operator如何解决

问题原因

你遇到的报错是因为declare -a声明的是普通索引数组,仅支持整数类型的下标。当你传入package.json这类带特殊字符的字符串作为键时,Bash会尝试将字符串解析为算术表达式,因此触发了syntax error: invalid arithmetic operator报错。

解决方案

Bash 4.0及以上版本支持关联数组(也就是你需要的字典类型),支持字符串作为键,只需要修改声明语句即可:

  1. 将原有声明declare -a test_dict修改为declare -A test_dict,注意参数A必须大写。
  2. 原有赋值逻辑无需修改,变量引用建议加双引号,避免路径带空格时出现异常。

可运行的完整示例代码

# 声明关联数组(字典)
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:15:02