问题标签 [bash4]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
62 浏览

python - bash 4.4 在 python 中与 os.system

我在 python 脚本中运行 bash 脚本时遇到问题script.py

当我运行它时python script.py,没有list2.txt写入,但在终端上我看到我在里面bash-4.4而不是本机 macOS bash。

有什么想法可能导致这种情况吗?

我在上面发布的脚本是一个更大脚本的一部分,它首先读取一些文件并输出list.txt

编辑:这里有更多描述 在第一个 python 脚本中,我解析了一个文件(具体来说是 genbank 文件),将包含项目(位置、链、名称)的列表写入list.txt. 这list.txt必须转换为可以被第二个 python 脚本解析,因此 sed.

list.txt

必须替换所有括号 ,:才能'看起来像所需的输出list2.txt

0 投票
2 回答
2172 浏览

bash - Bash 4.0.0 中 $@ 未绑定变量的解决方法?

在具体的 Bash 版本4.0.0中,有没有办法解决在启用$@时使用空引发未绑定变量错误的问题set -u

考虑以下:

当我提供一组空参数时,给我以下输出:

我只在 Bash 版本中看到这种行为4.0.0

我希望使用变量替换${@:-}可以让我解决这个问题,但似乎不是。

有没有办法解决这个问题?

0 投票
1 回答
138 浏览

bash - Bash 4.3+ - 递归斐波那契

我正在研究我的编程语言,它可以编译成 bash 4.3+ 代码。我正处于语言的最后阶段,但我对递归函数有一个小问题。这是 bash 代码,它应该返回给定索引的斐波那契数。

此代码中的问题是 fib(5) 给出的 3 显然是错误的。我认为问题是,当我将 fib1 和 fib2 作为存储返回值的方式传递时,它们会被分配它们的每个调用覆盖。如果那是问题,我该怎么做fib1他们的fib2执行范围成为本地人。

请注意,我不想使用return语句来返回值,我想尝试使用declare -nnamerefs 找到解决方案。

谢谢

0 投票
1 回答
319 浏览

bash - 是否可以在 Bash 4.0 中对一个变量进行子字符串和大写?

给定一个变量var=toucan,我可以执行以下操作:

是否有可能做类似于echo ${var:3^^}得到的事情CAN

0 投票
1 回答
2387 浏览

string - 在 Bash 中回显 echo 参数

这是显示问题的代码:

我希望这段代码输出 ['a', 'e'] 而不是 ['a', nothing]。

我认为问题在于echo $1。我的问题有点类似于这个。但似乎大多数解决方案都不适合我。我认为 Bash 从那个问题的版本中改变了它的行为:'3.00.15(1)-release (x86_64-redhat-linux-gnu)'。

我的 Bash 版本是“4.3.30(1)-release (i586-pc-linux-gnu)”。我努力了:

唯一有效的“hack”是echo "$1"。但我有一种感觉,这不是最好的做法。

PS我个人觉得这很有趣。感谢您对此的任何想法。

0 投票
2 回答
237 浏览

arrays - 在 Bash 中获取部分关联数组(双精度)的长度

我有一个关联数组,它就像通常的双数组一样。

结构类似于:[ [0,1], [0,1,2] ]。代码:

如何获得array[0]array[1]的长度?在此示例中:2 和 3。

谢谢你。

PS我试图搜索重复项。没有成功。如果不清楚:我不知道数组的长度。


效率测试后选择答案。这是基于@RenaudPacalet 回答的函数示例:

使用示例:getLength array 1在这个问题的情况下返回 3。

请记住,使用$(eval "echo \${!$1[@]}")${!array[@]}.

0 投票
1 回答
625 浏览

bash - SNMP 网络脚本

我正在考虑构建一个 SNMP 监控脚本,该脚本通过 SNMP 从交换机上的每个端口获取每个数据包值。

不幸的是,我的脚本似乎给了我变量所在的错误。

oldin-1=1: 找不到命令

有谁知道将变量增加到每个端口号的更好方法是什么?

0 投票
2 回答
78 浏览

linux - 在 BASH 参数扩展中用波浪号“~”替换子字符串时的行为不一致

在尝试编写快速函数时,我在几个不同服务器上的 BASH 参数扩展中遇到了一些奇怪的不一致行为。

在某些版本的 BASH 中,要在子字符串替换中使用波浪号,波浪号必须被转义,否则它将重新扩展到主目录:

而在其他系统上,它不会被重新扩展,并且尝试转义波浪号会将文字转义字符添加到字符串中:

请注意,我的目标是插入文字字符串“~”。


不需要转义的 BASH 版本在这里:

需要转义的 BASH 版本在这里:


那么发生了什么?

0 投票
1 回答
122 浏览

c - Bash在简单程序上重新打开tty

编译cc main.c

我想要一个单行命令,它可以让这个程序在ls不等待用户输入的情况下运行。

我在想:

  • 为什么第一个示例不起作用?
  • 什么命令可以使程序运行ls而不更改源?

我的问题是外壳和操作系统无关,但我希望它至少在 bash 4 上工作。

编辑:

在测试答案时,我发现这是可行的。

使用 strace:

这也有效:

似乎缓冲被忽略了。这是由于比赛条件吗?

0 投票
1 回答
1687 浏览

bash - 使用 bash 4 语法将 Makefile 中字符串的首字母大写

在 bash 4(及更高版本)中,要将存储在 variable 中的字符串的第一个字母大写L1,我可以执行以下操作:

这打印En

我正在尝试在 Makefile 中做类似的事情,但我无法让${L1^}语法正常工作。

产生空白输出。

我可以在不使用 tr/sed 的情况下使用这种 bash 语法吗?

PS我确实需要将它分配给一个变量而不是直接回显它。我正在使用 bash 4.3.48 和 GNU make 4.1。