小编Joh*_*han的帖子

在 Bash 中, if [ -z "$1" ] 和 if [ "$1" = "" ] 是否相同?

在 Bash shell 脚本中,以下两个语句之间有什么区别(如果有)?

  1. if [ -z "$1" ]
  2. if [ "$1" = "" ]

我发现自己在一些脚本中编写了第二个脚本,但后来我在这里读到使用-z实现了同样的事情。

如果使用第二个有问题,我们是否应该忽略第一个看起来更好一点?

bash shell-script

31
推荐指数
1
解决办法
7万
查看次数

如何使用 date 命令找出“星期一第 40 周”的日期?

如何使用 date 命令将诸如“monday week 40”之类的内容转换为 ISO 日期?

我正在玩这样的事情:

date --date='monday week 40' +'%Y-%m-%d'
Run Code Online (Sandbox Code Playgroud)

我要搜索的日期是 2011-10-03。

但是我的问题是这个日期字符串无效,所以我需要另一种方法来解决这个问题。

/谢谢

date

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

使用 $? 在 bash 中?

当我阅读有关 $? 另一个问题浮现在脑海中。

是否有关于如何使用 $ 的最佳实践?在 bash 中?


让我们举个例子:

我们有一个线性脚本,我想知道所有命令都执行正常。你认为调用一个小函数(我们称之为“did_it_work”)来检查错误代码是否可以,如果不是就中断。

#!/bin/bash 

function did_it_work {
    code=$1
    if [ "$code" -ne "0" ]
    then
        echo "Error failure: code $code "
        exit 1
    fi
}

dir=some/path

mkdir -p $dir
did_it_work $? 

cd $dir
did_it_work $? 

run_some_command
did_it_work $? 
Run Code Online (Sandbox Code Playgroud)

这种方法当然意味着我必须手动解决问题(如果有的话)并重新运行脚本。

您认为这是一个好主意还是有其他一些最佳实践可以做到这一点?

/谢谢

shell bash error-handling

10
推荐指数
3
解决办法
9628
查看次数

为什么“she-bang”以“#!”开头?

为什么“she-bang”以#!,开头#!/bin/bash?我一直接受这是如何完成的,但这背后有什么原因吗?

为什么从#;开始 这不是通常的评论吗?或者它应该是评论的重点?

shell history shebang

10
推荐指数
1
解决办法
1008
查看次数

“grep -r foo *”与“grep -r foo”。

使用 grep -r 时,您可以使用 * 或 . 它似乎返回了同样的东西,但它真的一样吗?

假设我搜索“foo”,然后我可以写

grep -r foo *
Run Code Online (Sandbox Code Playgroud)

或者

grep -r foo .
Run Code Online (Sandbox Code Playgroud)

有人会尝试解释 . 和 *?

grep wildcards

10
推荐指数
1
解决办法
1197
查看次数

为什么在最后添加 -print0 时 find:s -or 会失败?

我正在编写一个小脚本来修改目录树中的一些电影,我想用 bash for 循环或类似方法解析该树。

所以我开始寻找文件

find -iname *.mov -or -iname *.mkv -or -iname *.avi
Run Code Online (Sandbox Code Playgroud)

他按预期向我展示了各种文件。

但是然后我尝试用这个循环结果(因为某些目录名称中有空格)。

find -iname *.mov -or -iname *.mkv -or -iname *.avi -print0 | while read -d $'\0' line
do
    echo $line
done
Run Code Online (Sandbox Code Playgroud)

但现在他只返回avi文件!所以当我添加 -print0 时,他似乎忽略了我的 -or 和另一个 -iname。

这里发生了什么,我错过了什么?

在循环结果之前,我是否需要将 find 的结果发送到 tmpfile 中?

find

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

为什么 $((40-35)) 变成了 5?

背后隐藏着什么奇怪的shell语法,它是$((40-35))如何计算值的?

例子:

$> echo $((40-35))
5
Run Code Online (Sandbox Code Playgroud)

shell bash arithmetic

3
推荐指数
1
解决办法
669
查看次数