相关疑难解决方法(0)

为什么 ( exit 1 ) 不退出脚本?

我有一个脚本,当我想要它时它不会退出。

具有相同错误的示例脚本是:

#!/bin/bash

function bla() {
    return 1
}

bla || ( echo '1' ; exit 1 )

echo '2'
Run Code Online (Sandbox Code Playgroud)

我假设会看到输出:

:~$ ./test.sh
1
:~$
Run Code Online (Sandbox Code Playgroud)

但我实际上看到:

:~$ ./test.sh
1
2
:~$
Run Code Online (Sandbox Code Playgroud)

()命令链是否以某种方式创建了一个范围?exit如果不是脚本,退出是什么?

shell-script exit subshell

60
推荐指数
3
解决办法
5万
查看次数

在 bash 中,在管道未设置值后读取

使用 ksh 我使用 read 作为分隔值的便捷方法:

$ echo 1 2 3 4 5 | read a b dump
$ echo $b $a 
2 1
$
Run Code Online (Sandbox Code Playgroud)

但它在 Bash 中失败了:

$ echo 1 2 3 4 5 | read a b dump
$ echo $b $a 
  
$
Run Code Online (Sandbox Code Playgroud)

我没有在手册页中找到失败的原因,知道吗?

shell bash pipe read

29
推荐指数
2
解决办法
1万
查看次数

为什么我的变量在一个“while read”循环中是局部变量,而在另一个看似相似的循环中却不是?

为什么我$x从下面的片段中得到不同的值?

#!/bin/bash

x=1
echo fred > junk ; while read var ; do x=55 ; done < junk
echo x=$x 
#    x=55 .. I'd expect this result

x=1
cat junk | while read var ; do x=55 ; done
echo x=$x 
#    x=1 .. but why?

x=1
echo fred | while read var ; do x=55 ; done
echo x=$x 
#    x=1  .. but why?
Run Code Online (Sandbox Code Playgroud)

pipe shell-script variable-substitution variable

28
推荐指数
3
解决办法
3万
查看次数

什么是 shell 中的命令替换?

我正在将 Ubuntu 16.04 与 Bash 一起使用,我尝试在Wikipedia中阅读此处此处,但我无法理解一般 shell 脚本中“命令替换”的含义,特别是在 Bash 中,如下所示:

$(command)
Run Code Online (Sandbox Code Playgroud)

或者

`command`
Run Code Online (Sandbox Code Playgroud)

这个词的含义是什么?

编辑:当我第一次发布这个问题时,我已经知道替换的纯概念以及变量替换的 Linux 概念(通过执行替换变量的值),但我仍然从文档中错过了这个 shell 特性的目的原因或原因组。


问题锁定后我的回答

命令替换是一种具有专用语法的操作,用于执行命令并将该命令的输出保存(存储)在变量中以备后用。

一个例子date

thedate="$(date)"
Run Code Online (Sandbox Code Playgroud)

然后我们可以使用以下命令打印结果printf

printf 'The date is %s\n' "$thedate"
Run Code Online (Sandbox Code Playgroud)
  1. 命令替换语法是$().
  2. 命令本身是date.
  3. 结合我们得到的$(date),它的值是替换的结果(我们可以在执行后得到)。
  4. 我们将该值保存在变量 中$thedate以备后用。
  5. printf根据上面的命令,我们使用 , 显示变量保存的输出值。

注意:\ninprintf是换行符。

command-substitution

11
推荐指数
1
解决办法
4万
查看次数

6
推荐指数
1
解决办法
2320
查看次数