gpt4 book ai didi

bash 脚本在获取时产生不同的结果

转载 作者:行者123 更新时间:2023-12-03 14:15:23 25 4
gpt4 key购买 nike

你能帮我吗,为什么这个脚本在来源时(甚至直接在控制台上)有效而在脚本上不起作用?
我已经检查过,无论如何我在/bin/中使用相同的 bash,并且始终使用 4.4.19(1)-release(使用 $BASH_VERSION 检查)。
此外,我尝试删除shebang,但没有任何变化。

#!/bin/bash

fname=c8_m81l_55.fit
bname=${fname%%+(_)+([0-9]).fit}
echo $bname
给出这些结果:
test:~$ ./test.sh
c8_m81l_55.fit
test:~$ . ./test.sh
c8_m81l

最佳答案

Bash 无法识别 +(pattern)语法,除非启用了 extglobs,并且默认情况下它们是禁用的。显然,您的 bash 设置可以在交互式 session 中启用它们;这就是为什么您的脚本只有在交互式 shell 中才起作用的原因。

要解决这个问题,请通过以下命令在脚本中启用 extglobs:

shopt -s extglob

或者使用不管 shell 的交互性如何工作的替代方法:
bname=$(sed 's/__*[0-9][0-9]*\.fit$//' <<< $fname)
# with GNU sed it'd look like:
bname=$(sed -E 's/_+[0-9]+\.fit$//' <<< $fname)

关于bash 脚本在获取时产生不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61135749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com