意识到我的 bash 脚本在开发中需要从第 1 行开始逐行进行彻底测试
开始伴侣终端会话
垂直分屏,左侧 emacs 编辑 bash 脚本,右侧 watch bash 脚本命令,让一侧编辑立即在右侧可见,一目了然 - 结束手动从一个屏幕到另一个屏幕的潮汐切换或工作场所的工作场所
bash脚本,可变块,定义关联数组
*脚本无法正常工作,错误消息'语法错误:“(”意外'*
研究,发现该错误发生,如果Shell无法与关联阵列一起工作 - SH无法做到,Bash可以做到这一点
结束屏幕,返回纯bash,执行bash脚本,目睹它的工作原理
问题:有什么可以做的,以便屏幕命令将依靠shell“ bash”而不是“ sh”?有任何选择导致该开关吗?-shell = bash?基本上,需要什么。
更新
君士坦丁AB是正确的。事实证明:从技术上讲,有必要将Shebang无处不在,但是无论如何,在脚本的第1行中。当然,就在行的开头,使其成为整个文件的第一组字符。并且基本上可能仅在第1行中设置,使其他所有内容都在第2行或更高版本中。
我的错误是,当然,我将Shebang设置为bash-但是在第11行,在第10行征服段之后,而不是第1行。
例子:
前
emacs /tmp/test-script.sh(设置可执行文件,保存如下)
# Super important stuff in need of being mentioned at the top
#!/bin/bash
declare -A asso_array=(
[var1]=""
[var2]="Seems to work"
[var3]="Test"
[var4]=""
)
echo ${asso_array[@]}
echo "Hello World!"
观看/tmp/test-script.sh
Every 2.0s: /tmp/test-script.sh Sat Jan 20 14:02:11 2024
/tmp/test-script.sh: 4: /tmp/test-script.sh: Syntax error: "(" unexpected
后
emacs /tmp/test-script.sh(设置可执行文件,保存如下)
#!/bin/bash
# Super important stuff in need of being mentioned at the top
declare -A asso_array=(
[var1]=""
[var2]="Seems to work"
[var3]="Test"
[var4]=""
)
echo ${asso_array[@]}
echo "Hello World!"
注意:一旦您将 shebang 放入第 1 行,路径终点(在本例中为“bash”)就会突出显示!
观看/tmp/test-script.sh
Every 2.0s: /tmp/test-script.sh Sat Jan 20 14:05:11 2024
Test Seems to work
Hello World!
因此,吸取教训,回顾一下:
谢邦第一!无论!
这是 bash 脚本的技术必要性。
偏离了,bash 脚本基本上就会失败。
您需要将脚本标记为 bash 脚本
这是通过以正确的“ shebang line”开始来完成的,在本例中
这告诉系统脚本在运行时由 bash 执行,而不是由其他任何东西执行。
当前接受的答案假设 OP 正在尝试运行 BASH 脚本,事实也确实如此。然而,OP 的问题本身询问
screen
,因此要单独回答问题而不是 OP 的情况: