191得票8回答
为什么$$返回的是与父进程相同的id?

我有Bash的问题,但不知道原因。 在shell下,我输入了:echo $$ ## print 2433 (echo $$) ## also print 2433 (./getpid) ## print 2602 这里的 getpid 是一个 C 程序,用于获取当前进程的 pid,例如...

107得票7回答
如何从一个函数中有效地终止 Bash 脚本的执行

我在Bash函数中使用了"exit 1"语句来终止整个脚本,并且它运行良好:function func() { echo "Goodbye" exit 1 } echo "Function call will abort" func echo...

82得票11回答
从子shell设置父shell的变量

我该如何在子shell中设置一个变量,使得它能够影响到父shell?a=3 (a=4) echo $a

78得票3回答
如何在shell(sh,bash等)中将多个命令传输到单个命令中?

我该如何将多个命令的标准输出重定向到单个命令中? 示例1:将所有三个echo命令的输出合并并排序:echo zzz; echo aaa; echo kkk 期望的输出:aaa kkk zzz 示例2:使用管道将所有命令放入单个命令行中,而无需重定向到临时文件:setopt > /tmp...

26得票2回答
何时命令替换会比孤立的相同命令产生更多的子Shell?

昨天有人向我建议,在Bash中使用命令替换会导致不必要的子shell生成。该建议是特定于这个用例的:# Extra subshell spawned foo=$(command; echo $?) # No extra subshell command foo=$? 就我所知,这似乎适用于此...

24得票6回答
使用子shell和子字符串来解决Bash中的坏替换问题

一个人为的例子... 给定FOO="/foo/bar/baz" 这个(在bash中)可以工作。BAR=$(basename $FOO) # result is BAR="baz" BAZ=${BAR:0:1} # result is BAZ="b" 这不行BAZ=${$(basen...

24得票7回答
Jenkins流水线中的sh命令似乎不尊重管道符号。

我正在使用版本2.32.2上的管道中的Jenkinsfile。由于各种原因,我希望从pom文件中提取版本号字符串。我希望不必添加maven help插件并使用evaluate。我很快就想出了一个小的sed表达式,用于从pom中获取它,并在jenkins工作区执行器的命令行上使用管道来工作。 ...

22得票1回答
何时将Bash变量导出到子shell和/或可由脚本访问?

我对于bash变量是否会被导出到子shell中并且何时能够被脚本访问感到困惑。到目前为止,我的经验使我相信bash变量会自动传递给子shell。例如: > FOO=bar > echo $FOO bar > (echo $FOO) bar 以上内容似乎表明bash变量可以在...

22得票4回答
如何在不创建子shell的情况下将命令输出存储到变量中 [Bash <v4]

ksh 有一个非常有趣的构造来实现这一点,在此答案中详细说明:https://dev59.com/NGgu5IYBdhLWcg3w2alm#11172617 自从Bash 4.0以来,就有了一个内置的 mapfile 命令,可以解决这个问题:http://www.gnu.org/softwa...

21得票4回答
在Bash中,$()和()有什么区别?

当我输入ls -l $(echo file)时,括号中的输出(仅为简单的echo)将被传递给外部的ls -l命令。它相当于简单的ls -l file。 当我输入ls -l (echo file)时,会出现错误,因为不能在外部命令中嵌套使用()。 有人可以帮助我理解$()和()之间的区别吗?