如果我test在bash中执行命令,test(评估条件表达式)内置实用程序将启动: $ type test test is a shell builtin $ type -a test test is a shell builtin test is /usr/local/bin/test test is /usr/bin/test $ 但是,从type -a test上面的输出中可以看到,test/ usr / local / bin目录中有另一个,/ usr / bin目录中又有一个。可执行文件如何排序,即始终首选内置命令,然后其余命令取决于$ PATH变量中的目录顺序?另外,是否可以更改可执行文件的启动顺序,例如,如果键入test,则启动/ usr / bin / test而不是bash-builtin test?
如果我想获得内置bash的简短用法消息,可以help <builtin>在命令提示符下使用,例如 $ help export export: export [-fn] [name[=value] ...] or export -p Set export attribute for shell variables. Marks each NAME for automatic export to the environment of subsequently executed commands. If VALUE is supplied, assign VALUE before exporting. Options: -f refer to shell functions -n remove the export …
我已经“继承”了运行GNU“ bash” shell的Linux机器的一些shell脚本。在一种特定情况下,机器运行GNU bash版本2.0.5b 这些脚本之一有一个wait &(“&”符号)作为for循环“ for行”的一部分。乍一看,这似乎是一种好奇/有趣的习惯用法,但是我在网上搜索时并未返回任何相关信息。man wait显示了“ BASH_BUILTINS”(“ BASH BUILTINS COMMAND”)联机帮助页,该联机帮助具有以下描述: wait [n] Wait for the specified process and return its termination status. n may be a process ID or a job specification; if a job spec is given, all processes in that job's pipeline are waited for. If …
Bash的{}大括号扩展语法允许创建简单的排列 # echo {b,c,d}{a,e,i,o,u} ba be bi bo bu ca ce ci co cu da de di do du 但是我不清楚是否/如何将其与数组一起使用,除非非常笨拙地使用$() echoandeval 有没有一种简单的方法可以将数组与花括号(排列)扩展一起使用? 例如,想象一下类似的事情(这当然不起作用): CONS=( b c d ) VOWEL=( a e i o u ) echo {${CONS[@]}}{${VOWEL[@]}}
在bash手册中,写道 Builtin commands are contained >>> within <<< the shell itself 另外,这个答案指出 A built-in command is simply a command that the shell carries out itself, instead of interpreting it as a request to load and run some >>> other program <<< 在上运行compgen -b时bash 4.4,我会收到所有shell内置命令的列表。我看到例如,[并且kill被列为shell内置程序。但是它们的实际位置是: /usr/bin/[ /bin/kill 我认为这是builtin将命令编译为/bin/bash可执行文件的一种手段。因此,真正使我感到困惑的是:请纠正我,但是builtin当一个单独的命令实际上不属于shell的一部分时,它又如何成为a 呢?
问题的简要说明: 是否有内置的bash方法来计算bash数组中元素的数量,而该数组的名称是动态的(即存储在变量中),而无需求助于对该数组的完全复制或使用eval? 更多信息: 使用bash参数替换,可以执行以下操作: 确定数组的长度: myArr=(A B C); echo ${#myArr[@]}。 通过名称间接引用变量:( NAME=myVar; echo ${!NAME}这也适用于数组元素): NAME=myArr[1]; echo ${!NAME} 但是,如果数组的名称存储在另一个变量中,那么如何确定数组中元素的数量呢?(可以将其视为上述两个参数替换的组合。)例如: myArr=(A B C D) NAME=myArr # Get the number of elements in the array indirectly referenced by NAME. count=${#$NAME[@]} # This syntax is invalid. What is the right way? 以下是所有失败的多次尝试: # Setup …