小编Ben*_* W.的帖子

在bash中传递空变量

我的问题:

#!/bin/bash

function testFunc(){
    echo "param #1 is :" $1
    echo "param #2 is :" $2
}

param1="param1"
param2="param2"

testFunc $param1 $param2
Run Code Online (Sandbox Code Playgroud)

这样输出是:

param #1 is : param1
param #2 is : param2
Run Code Online (Sandbox Code Playgroud)

但是当我将param1设置为空字符串时:

param1=""
Run Code Online (Sandbox Code Playgroud)

然后输出如下:

param #1 is : param2
param #2 is :
Run Code Online (Sandbox Code Playgroud)

我想问题是当第一个参数为空时,它没有被声明,所以它实际上不会作为函数参数传递.

如果这是问题,那么有没有办法在bash中声明变量"空字符串",或者是否有任何解决方法来获得预期的行为?

注意:如果我调用这样的函数,它按预期工作:

testFunct "" $param2
Run Code Online (Sandbox Code Playgroud)

但我想保持代码清洁.

更新:

我最近发现-u了一个标志,如果即将使用未绑定的变量,它会引发错误.

$ bash -u test.sh
param #1 is : param1
test.sh: line 5: $2: unbound variable
Run Code Online (Sandbox Code Playgroud)

string bash parameter-passing

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

如何设置crontab以在特定时间执行

如何设置我的crontab以在每天晚上11:59执行X脚本而不通过电子邮件发送或创建任何日志?

现在我的crontab看起来像这样

@daily /path/to/script.sh
Run Code Online (Sandbox Code Playgroud)

cron settings

18
推荐指数
3
解决办法
497
查看次数

用<?php替换PHP短开标签的批处理脚本

我有很多年来编写的大量php文件,我需要将所有短开标签正确替换为正确的显式开放标签.

change "<?" into "<?php"
Run Code Online (Sandbox Code Playgroud)

我认为这个正则表达式将正确选择它们:

<\?(\s|\n|\t|[^a-zA-Z])
Run Code Online (Sandbox Code Playgroud)

照顾像这样的案件

<?//
<?/*
Run Code Online (Sandbox Code Playgroud)

但我不知道如何处理整个文件夹树并检测.php文件扩展名并应用正则表达式并在文件更改后保存.

如果你掌握了正确的工具,我觉得这可以非常简单.(sed手册中有一个有趣的黑客:4.3示例/将文件重命名为小写).

也许我错了.
或许这可能是一个oneliner?

php awk sed find

18
推荐指数
4
解决办法
2万
查看次数

在Linux中将当前日期添加x秒

我这里有两台Linux(CentOS 6.0)机器,我需要在当前日期时间内添加(或删除)5秒钟.最后,我的两台机器都会有5秒的间隙(一个是正确的时间,另一个是5秒或多或少).

我知道我可以使用此命令更改日期:

date -s "DD MMM YYYY HH:MM:SS"
Run Code Online (Sandbox Code Playgroud)

但我需要精确,我很难在合适的时间运行命令.

所以我想知道是否有一种方法可以在当前时间增加5秒,有点像你选择时区而不是格林威治(在我的情况下是+5小时).

time centos date

18
推荐指数
2
解决办法
4万
查看次数

使用curl上载本地目录中的所有文件

我想将所有文件上传到一个目录中,我知道如何使用curl上传一个文件,如下所示:

curl -T "local/xxx.suffix" -u xxx:psw "ftp://192.168.1.158/public/demon_test/xxx.suffix"
Run Code Online (Sandbox Code Playgroud)

如何将当前目录中的所有文件(子目录)上传到FTP服务器?

ftp shell terminal curl

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

bash多行字符串无插值

我想在bash中执行以下操作,但没有插入变量:

cat >aBashScript.sh <<EOL
$name
EOL
Run Code Online (Sandbox Code Playgroud)

该文件应包含'$ name',但它是空的.怎么做到这一点?

bash

18
推荐指数
2
解决办法
5284
查看次数

正则表达式不超过两个重复的字母/数字

我要求在XSL文件中处理不超过两个相同字母/数字的正则表达式.

  • 没有空间
  • 不支持特殊字符
  • 支持(az,AZ,0-9)
  • 需要一个az
  • 需要0-9之一
  • 不超过2个相同的字母/数字(即,BBB将失败,BB被接受)

到目前为止我有什么

(?:[^a-zA-Z0-9]{1,2})
Run Code Online (Sandbox Code Playgroud)

javascript regex

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

Monads VS期货的应用函子

假设我想从2个远程服务聚合数据,并尽可能快地提供响应:

def loadUser: Future[User]
def loadData: Future[Data]

case class Payload(user: User, data: Data)
Run Code Online (Sandbox Code Playgroud)

我知道这个顺序执行异步任务:

for {
  user <- loadUser
  data <- loadData
} yield Payload(user,data)
Run Code Online (Sandbox Code Playgroud)

虽然这个并行执行它们,因为异步任务在顺序链接之前被触发:

val userF = loadUser
val dataF = loadData
for {
  user <- userF 
  data <- dataF
} yield Payload(user,data)
Run Code Online (Sandbox Code Playgroud)

然而,差异对我来说有点过于含蓄,有些人可能最初没有注意到它.


申请人也解决了这个问题

(loadUser |@| loadData) { Payload(_,_) }
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我在应用程序和monad之间使用什么来执行并行异步计算吗?每种方法的优缺点是什么?

monads scala scalaz applicative scala-cats

18
推荐指数
1
解决办法
1415
查看次数

在sed或awk中大写字符串

我有三种类型的字符串,我想在bash脚本中大写.我认为sed/awk是我最好的选择,但我不确定.考虑到以下要求,最好的方法是什么?

  1. 单词
    例如 taco -> Taco

  2. 由连字符分隔的多个单词,
    例如 my-fish-tacos -> My-Fish-Tacos

  3. 由下划线分隔的多个单词,
    例如 my_fish_tacos -> My_Fish_Tacos

bash awk sed

17
推荐指数
3
解决办法
9512
查看次数

我们如何在shell脚本中将变量与字母分开

我试过打印"狗是最棒的".用这个bash脚本.

#!/bin/bash

ANIMAL="Dog"
echo "$ANIMALs are the best."
exit 
Run Code Online (Sandbox Code Playgroud)

但是,我得到了"最好的".打印出来,因为sin $ANIMALS没有与变量分开.我该如何分开?

bash

17
推荐指数
2
解决办法
6555
查看次数