我有一个脚本,当我想要它时它不会退出。
具有相同错误的示例脚本是:
#!/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如果不是脚本,退出是什么?
使用 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)
我没有在手册页中找到失败的原因,知道吗?
为什么我$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) 我正在将 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)
$().date.$(date),它的值是替换的结果(我们可以在执行后得到)。$thedate以备后用。printf根据上面的命令,我们使用 , 显示变量保存的输出值。注意:\ninprintf是换行符。
使用有什么区别:
eval 'echo "foo"'
Run Code Online (Sandbox Code Playgroud)
和
echo 'echo "foo"' | bash
Run Code Online (Sandbox Code Playgroud)
有没有?