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

bash脚本传递数组参数时出现"("意外语法错误的问题求助

bash脚本传递数组参数时出现"("意外语法错误的问题求助

看起来你的问题核心是调用脚本的方式不对,导致用了不支持bash数组语法的POSIX shell(比如dash)来执行你的bash脚本,具体分析和解决办法如下:

错误原因

你的check_resolution_video.sh开头已经写了#!/bin/bash,但如果用sh命令去调用它(比如主脚本里的sh "$path"/check_resolution_video.sh "${arr[@]}"),或者用.(source)命令但当前shell不是bash的话,系统会用默认的sh来执行——而很多Linux发行版里/bin/sh其实是指向dash的,dash是POSIX标准的轻量shell,不支持bash特有的数组语法,所以遇到arr=("$@")这种写法就会报错Syntax error: "(" unexpected。

另外你主脚本里的source调用还有语法错误:.~/Script/check_resolution_video.sh里的.和~/之间没有空格,正确写法是. ~/Script/check_resolution_video.sh,但即使修正了空格,source的方式还是依赖当前shell是bash才能支持数组。

解决步骤

  1. 修正脚本调用方式

    • 把主脚本里所有调用check_resolution_video.sh和bitrate.sh的地方,从sh xxx.sh或者. xxx.sh改成用bash直接调用:
      • 比如把sh "$path"/check_resolution_video.sh "${arr[@]}"改成bash "$path"/check_resolution_video.sh "${arr[@]}"
      • 把.~/Script/check_resolution_video.sh "${arr[@]}"改成bash ~/Script/check_resolution_video.sh "${arr[@]}"
      • 把.~/Script/bitrate.sh "${arr[1]}_1080_directory" "output.mp4"改成bash ~/Script/bitrate.sh "${arr[1]}_1080_directory" "output.mp4"
        这样能确保脚本用bash来执行,完美支持数组语法。
  2. 验证系统默认shell
    可以运行ls -l /bin/sh看看你的默认sh指向什么,如果是dash,那以后尽量不要用sh来执行bash脚本,避免再踩类似的兼容坑。

  3. 确保主脚本的执行环境
    你的主脚本开头已经有#!/bin/bash,所以运行主脚本的时候最好用bash main_script.sh,或者先给主脚本加可执行权限(chmod +x main_script.sh)然后直接./main_script.sh,这样能保证主脚本本身也是在bash环境下运行,避免后续调用出现连锁的兼容问题。

额外小提示

你主脚本里的path=pwd``可以改成更安全的path=$(pwd),这是bash里推荐的命令替换写法;另外read -p的交互方式如果是批量处理的话可能不太方便,不过这个属于额外优化选项了。

备注:内容来源于stack exchange,提问作者ilie alexandru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 16:24:32