相关疑难解决方法(0)

Bash 运算符 [[ vs [ vs ( vs ((?

我对这些运算符在 bash 中使用时有何不同(括号、双括号、括号和双括号)感到有些困惑。

[[ , [ , ( , ((
Run Code Online (Sandbox Code Playgroud)

我见过人们在这样的 if 语句中使用它们:

if [[condition]]

if [condition]

if ((condition))

if (condition)
Run Code Online (Sandbox Code Playgroud)

shell bash test

436
推荐指数
6
解决办法
19万
查看次数

获取通过管道传输到另一个进程的退出状态

我有两个进程foobar,用管道连接:

$ foo | bar
Run Code Online (Sandbox Code Playgroud)

bar总是退出 0;我对foo. 有什么办法可以得到吗?

shell pipe exit

392
推荐指数
11
解决办法
20万
查看次数

我怎样才能让 cron 现在运行一项工作,以进行测试/调试?不改变时间表!

我有一个计划每天运行的 cron 作业,除了更改计划之外,还有没有其他方法可以立即对命令进行测试运行以查看它是否按预期工作?

编辑:(从评论中)我知道在 shell(我的 shell)中输入命令时该命令可以正常工作,但是我想知道当 cron 运行它时它是否可以正常工作,它可能会受到 ENV 或特定于 shell 的东西的影响(~扩展) 或所有权和许可的东西或...

cron debugging

247
推荐指数
6
解决办法
46万
查看次数

什么时候需要双引号?

过去的旧建议是对任何涉及 a 的表达式加双引号$VARIABLE,至少在希望 shell 将其解释为单个项目的情况下,否则,内容中的任何空格$VARIABLE都会脱离 shell。

但是,我知道在较新版本的 shell 中,不再总是需要双引号(至少出于上述目的)。例如,在bash

% FOO='bar baz'
% [ $FOO = 'bar baz' ] && echo OK
bash: [: too many arguments
% [[ $FOO = 'bar baz' ]] && echo OK
OK
% touch 'bar baz'
% ls $FOO
ls: cannot access bar: No such file or directory
ls: cannot access baz: No such file or directory
Run Code Online (Sandbox Code Playgroud)

zsh,而另一方面,同样的三个命令成功。因此,基于此实验,似乎在 中bash可以省略 内部的双引号[[ ... ]],但不能省略内部 …

shell bash zsh shell-script quoting

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

没有左边的“如果”,方括号是什么意思?

据我所知,方括号通常用于将表达式括在 if else 语句中。

但我发现方括号没有“if”,如下所示:

[ -r /etc/profile.d/java.sh ] && . /etc/profile.d/java.sh
Run Code Online (Sandbox Code Playgroud)

在下面的脚本中。

#!/bin/bash### BEGIN INIT INFO  
# Provides:          jbossas7  
# Required-Start:    $local_fs $remote_fs $network $syslog  
# Required-Stop:     $local_fs $remote_fs $network $syslog  
# Default-Start:     2 3 4 5  
# Default-Stop:      0 1 6  
# Short-Description: Start/Stop JBoss AS 7  
### END INIT INFO  
# chkconfig: 35 92 1  

## Include some script files in order to set and export environmental variables  
## as well as add the appropriate executables to …
Run Code Online (Sandbox Code Playgroud)

shell bash

72
推荐指数
2
解决办法
9万
查看次数

shell 比较中的单等号和双等号 (=) 有什么区别?

为了比较里面的字符串,if我们需要使用双方括号。有些书说比较可以通过=. 但它也适用于==

#!/bin/bash
a="hello"
b="world"
if [[ $a == $b ]];then
    echo "equal"
fi
Run Code Online (Sandbox Code Playgroud)

比较===比较有区别吗?

bash shell-script

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

test 或 [ 或 [[ 在 bash shell 和其他 shell 之间更便携吗?

我知道我可以

$ [ -w /home/durrantm ] && echo "writable"
writable
Run Code Online (Sandbox Code Playgroud)

或者

$ test -w /home/durrantm && echo "writable"
writable
Run Code Online (Sandbox Code Playgroud)

或者

$ [[ -w /home/durrantm ]] && echo "writable"
writable
Run Code Online (Sandbox Code Playgroud)

我喜欢使用第三种语法。它们在所有方面以及所有负面和边缘情况下都等效吗?可移植性是否有任何差异,例如 Ubuntu 上的 bash 和 OS X 上的 bash 或较旧/较新的 bash 版本,例如 4.0 之前/之后,它们是否都以相同的方式扩展表达式?

shell posix portability test

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

[[ $a == z* ]] 和 [ $a == z* ] 有什么区别?

这两者有什么区别吗。

[[ $a == z* ]]
Run Code Online (Sandbox Code Playgroud)

[ $a == z* ] 
Run Code Online (Sandbox Code Playgroud)

我可以举一个例子,他们会有不同的输出吗?

此外, 的工作方式[[ ]][ ]?

bash shell-script wildcards test

39
推荐指数
2
解决办法
3856
查看次数

比较整数:算术表达式或条件表达式

在 Bash 中,可以使用条件表达式比较两个整数

ARG1 OP ARG2

OP是一个-eq-ne-lt-le-gt,或-ge。如果arg1 分别等于、不等于、小于、小于或等于、大于或大于或等于arg2,则这些算术二元运算符返回 true 。Arg1arg2可以是正整数或负整数。

或算术表达式:

<= >= < > 比较

== != 平等与不平等

为什么我们有两种不同的方法来比较两个整数?什么时候用哪个?

例如,[[ 3 -lt 2 ]]使用条件表达式,并(( 3 < 2 ))使用算术表达式。当比较为真时两者都返回 0

比较两个整数时,这两种方法可以互换使用吗?如果是,为什么 Bash 有两种方法而不是一种方法?

shell bash history arithmetic test

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

如何在 Linux 上检查密码?

我想从 linux 命令行检查给定的明文密码是否与 /etc/shadow 上的加密密码相同

(我需要这个来验证网络用户的身份。我正在运行一个嵌入式 linux。)

我可以访问 /etc/shadow 文件本身。

linux command-line password embedded

33
推荐指数
2
解决办法
12万
查看次数