Shell脚本逐行输入正常,存入文件执行异常求助
问题分析与解决
哈哈,这个坑我踩过!咱们来唠唠为啥会出现这种“明明逐行输没问题,存成脚本就拉胯”的情况:
核心原因:执行脚本的Shell环境不对
你在终端逐行敲命令时,用的是默认的bash(大部分Linux/macOS终端默认都是bash),但把代码存成脚本直接运行时,系统会用默认的sh来解释——而很多系统里的sh其实是dash(一种轻量级Shell,对bash的部分语法支持不好),它不支持bash里这种灵活的数组追加语法,甚至对数组的处理逻辑都不一样!
而且你的脚本开头没加Shebang(就是指定用哪个Shell执行的那行代码),系统就自动用sh来跑,结果数组追加操作直接失效,最后echo $channels只输出了数组的第一个元素prod。
两步解决问题
给脚本加上bash的Shebang
在脚本第一行加上:#!/bin/bash这就告诉系统“用bash来执行我这个脚本”,确保数组语法能正常工作。
正确输出整个数组
你原来的echo $channels只会打印数组的第一个元素,要输出所有元素得用:echo "${channels[@]}"另外,给循环里的
$f加上双引号更安全,防止元素里有空格时出问题。
修正后的完整脚本
#!/bin/bash channels=(prod) for f in aaa bbb ccc do channels=("${channels[@]}" "$f") done echo "${channels[@]}"
现在再运行脚本,就能得到和你逐行执行一样的结果啦!
内容的提问来源于stack exchange,提问作者seemuch
相关产品推荐
相关产品推荐

