问题标签 [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.
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
bash - Bash 4.0.0 中 $@ 未绑定变量的解决方法?
在具体的 Bash 版本4.0.0
中,有没有办法解决在启用$@
时使用空引发未绑定变量错误的问题set -u
?
考虑以下:
当我提供一组空参数时,给我以下输出:
我只在 Bash 版本中看到这种行为4.0.0
。
我希望使用变量替换${@:-}
可以让我解决这个问题,但似乎不是。
有没有办法解决这个问题?
bash - Bash 4.3+ - 递归斐波那契
我正在研究我的编程语言,它可以编译成 bash 4.3+ 代码。我正处于语言的最后阶段,但我对递归函数有一个小问题。这是 bash 代码,它应该返回给定索引的斐波那契数。
此代码中的问题是 fib(5) 给出的 3 显然是错误的。我认为问题是,当我将 fib1 和 fib2 作为存储返回值的方式传递时,它们会被分配它们的每个调用覆盖。如果那是问题,我该怎么做fib1
他们的fib2
执行范围成为本地人。
请注意,我不想使用return
语句来返回值,我想尝试使用declare -n
namerefs 找到解决方案。
谢谢
bash - 是否可以在 Bash 4.0 中对一个变量进行子字符串和大写?
给定一个变量var=toucan
,我可以执行以下操作:
是否有可能做类似于echo ${var:3^^}
得到的事情CAN
?
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我个人觉得这很有趣。感谢您对此的任何想法。
arrays - 在 Bash 中获取部分关联数组(双精度)的长度
我有一个关联数组,它就像通常的双数组一样。
结构类似于:[ [0,1], [0,1,2] ]。代码:
如何获得array[0]和array[1]的长度?在此示例中:2 和 3。
谢谢你。
PS我试图搜索重复项。没有成功。如果不清楚:我不知道数组的长度。
效率测试后选择答案。这是基于@RenaudPacalet 回答的函数示例:
使用示例:getLength array 1
在这个问题的情况下返回 3。
请记住,使用$(eval "echo \${!$1[@]}")
比${!array[@]}
.
bash - SNMP 网络脚本
我正在考虑构建一个 SNMP 监控脚本,该脚本通过 SNMP 从交换机上的每个端口获取每个数据包值。
不幸的是,我的脚本似乎给了我变量所在的错误。
oldin-1=1: 找不到命令
有谁知道将变量增加到每个端口号的更好方法是什么?
linux - 在 BASH 参数扩展中用波浪号“~”替换子字符串时的行为不一致
在尝试编写快速函数时,我在几个不同服务器上的 BASH 参数扩展中遇到了一些奇怪的不一致行为。
在某些版本的 BASH 中,要在子字符串替换中使用波浪号,波浪号必须被转义,否则它将重新扩展到主目录:
而在其他系统上,它不会被重新扩展,并且尝试转义波浪号会将文字转义字符添加到字符串中:
请注意,我的目标是插入文字字符串“~”。
不需要转义的 BASH 版本在这里:
需要转义的 BASH 版本在这里:
那么发生了什么?
c - Bash在简单程序上重新打开tty
编译cc main.c
我想要一个单行命令,它可以让这个程序在ls
不等待用户输入的情况下运行。
我在想:
- 为什么第一个示例不起作用?
- 什么命令可以使程序运行
ls
而不更改源?
我的问题是外壳和操作系统无关,但我希望它至少在 bash 4 上工作。
编辑:
在测试答案时,我发现这是可行的。
使用 strace:
这也有效:
似乎缓冲被忽略了。这是由于比赛条件吗?
bash - 使用 bash 4 语法将 Makefile 中字符串的首字母大写
在 bash 4(及更高版本)中,要将存储在 variable 中的字符串的第一个字母大写L1
,我可以执行以下操作:
这打印En
。
我正在尝试在 Makefile 中做类似的事情,但我无法让${L1^}
语法正常工作。
产生空白输出。
我可以在不使用 tr/sed 的情况下使用这种 bash 语法吗?
PS我确实需要将它分配给一个变量而不是直接回显它。我正在使用 bash 4.3.48 和 GNU make 4.1。