标签: syntax

zsh 中的重复命令语法

我从 zsh 开始,我使用本手册

重复的语法表示为:

重复单词列表完成

但是我注意到:

repeat 5 echo ok
Run Code Online (Sandbox Code Playgroud)

也工作正常。

尽管如此,这种遗漏在这里是不合法的:

~ % f() { for a ; do echo $a; }
zsh: parse error near `}'
Run Code Online (Sandbox Code Playgroud)

所以问题是,这是代码中的漏洞还是有效的遗漏?可以依赖吗?我看到它在代码示例中很受欢迎。

repeat在 zsh 的男人中搜索过,但显然什么都没有。无论如何,正确的 zsh 文档是什么?

zsh syntax

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

如何在匹配表达式中编写正则表达式文字?

这个问题是关于在 bash 下的匹配表达式中编写正则表达式文字的正确方法。

在 zsh 中,下面的匹配成功了,正如我所料:

% [[ ' 123 ' =~ '^ [0-9]+ $' ]]; echo $?
0
Run Code Online (Sandbox Code Playgroud)

在 bash 中并非如此:

$ [[ ' 123 ' =~ '^ [0-9]+ $' ]]; echo $?
1
Run Code Online (Sandbox Code Playgroud)

我知道这场比赛在 bash 中成功

$ ( regexp='^ [0-9]+ $'; [[ ' 123 ' =~ $regexp ]]; echo $? )
0
Run Code Online (Sandbox Code Playgroud)

...但它需要将正则表达式分配给一个中间变量。


我的问题是:如何在 bash 下的匹配表达式中编写任意正则表达式文字

scripting bash shell-script regular-expression syntax

6
推荐指数
2
解决办法
2081
查看次数

bash 和 find 中的 \ 是什么意思?

我知道这\是一个转义字符,但是当我\在 bash 中编写时,我有这样的东西:

System-Product-Name:~$ \
> 
Run Code Online (Sandbox Code Playgroud)

那么 bash 会等待一些指令吗?当我使用

System-Product-Name:~$ \
> ls
Run Code Online (Sandbox Code Playgroud)

这是工作。但是当我使用

System-Product-Name:~$ cd Wideo \
> ls
bash: cd: too many arguments
Run Code Online (Sandbox Code Playgroud)

那么反斜杠就像管道一样工作吗|?我不这么认为。

当我使用这个命令时:

find . -name "FILENAME"  -exec rm {} \;
Run Code Online (Sandbox Code Playgroud)

为什么我需要终止它?我认为该命令find找到了正确的文件,并将exec它们从找到它们的路径中删除。如果没有这个,我所得到的信息就-exec没有任何论据,我就无法理解。为什么我不能只使用

find . -name "FILENAME"  -exec rm {}
Run Code Online (Sandbox Code Playgroud)

我只有有关 man find 中 exec 的信息:

exec 显示与 -exec、-execdir、-ok 和 -okdir 相关的诊断信息

那么为什么我在使用 exec 时需要终止呢?例如当我使用

find . -name "FILENAME"
Run Code Online (Sandbox Code Playgroud)

我不需要终止。

bash find syntax

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

空字符串作为 while 循环中的命令:空/空命令

我想知道 while 循环如何评估其循环条件。在手册页中它写道:

而列表-1; 做列表-2;完毕

只要列表 list-1 中的最后一个命令返回退出状态为零,while 命令就会连续执行列表 list-2。

列表

列表是由运算符 ;、&、&& 或 || 之一分隔的一个或多个管道的序列,并且可选地以 ;、& 或 之一终止。

管道

管道是由一个控制运算符分隔的一个或多个命令的序列 | 或|&。管道的格式是:

         [time [-p]] [ ! ] command [ [|?|&] command2 ... ]
Run Code Online (Sandbox Code Playgroud)

这意味着:

while <single-command>; do <list>; done;
Run Code Online (Sandbox Code Playgroud)

是有效的语法。只要<single-command>返回,就会执行列表0。如果我像这样运行 while 循环,我会收到(显然)错误:

$while aaa; do echo "foo"; done;
If 'aaa' is not a typo you can use command-not-found to lookup the package that contains it, like this:
cnf aaa

$while ; do echo …
Run Code Online (Sandbox Code Playgroud)

bash syntax

5
推荐指数
1
解决办法
2775
查看次数

If [ is a builtin and [[ is a keyword, then what is ((?

According to this post, [ is a builtin and [[ is a keyword. Since they can be regarded as command, everything after [ and [[ is regarded as command arguments and should be separated by spaces, until they meet final argument ] and ]]

But what is the type of (( ?

type ((
Run Code Online (Sandbox Code Playgroud)

will give an error:

 bash: syntax error near unexpected token `('. 
Run Code Online (Sandbox Code Playgroud)

I found that spaces is not relevant inside (( )).

echo $((1+1))
echo …
Run Code Online (Sandbox Code Playgroud)

shell bash syntax

5
推荐指数
1
解决办法
349
查看次数

为什么`source ~/.bash_aliases` 退出时出现语法错误?

此文件中的语法错误是什么?我看不出来

set-k8s-azure() { 
  export KUBECONFIG=~/.kube/config.azure-1 
}

set-k8s-minikube() { export KUBECONFIG=~/.kube/config.minikube }

minikube() {
  if [[ $@ == start* ]]; then
    set-k8s-minikube
  fi
  command minikube "$@"
}

alias pulr='if output=$(git status --porcelain) && [ -z "$output" ]; then git pull --rebase; else git stash save "pulr WIP saved" && git pull --rebase && git stash pop; fi'
alias vi=nvim
Run Code Online (Sandbox Code Playgroud)

source ~/.bash_aliases 产生:

bash: /home/niel/.bash_aliases: line 1: syntax error near unexpected token `('
bash: /home/niel/.bash_aliases: line 1: `set-k8s-azure() { '
Run Code Online (Sandbox Code Playgroud)

bash syntax

5
推荐指数
2
解决办法
1092
查看次数

bash 变量可接受的初始字符列表

bash 变量中可接受的字符是什么?

有人可以指出我 bash 手册页中描述 bash 变量可接受名称的地方吗?

我查看并提出了很多信息(请参阅问题编辑),但没有明确的答案。

bash variable syntax

5
推荐指数
1
解决办法
3724
查看次数

有提醒提前几天发出通知

我一直在尝试使用 Unix 程序remind,到目前为止我很享受这种灵活性。我已经设置了这个命令来警告我任何即将到来的提醒:

~$ remind -z -k'notify-send "Reminder"  "%s"' .reminders/reminders.rem
Run Code Online (Sandbox Code Playgroud)

它有效,但由于某种原因,它不尊重remind提前几天开始警告的功能(尽管它会持续几分钟),例如这样的提醒不会向-k标志中列出的命令提供输出:

REM September 28 +5 AT 20:11 +1 Get some foo bar %b
Run Code Online (Sandbox Code Playgroud)

此时,上面的示例只会notify-send在 9 月 28 日 20:11 前一分钟触发(由于某些原因,其他日期不会触发)。我想notify-send提前 5 天触发(在这个例子的情况下),然后每天触发。我如何实现这一目标?(不同的语法也可以,但其他人也没有达到我想要的)

remind syntax

5
推荐指数
1
解决办法
448
查看次数

正确定义每小时运行的进程的 Cron 计划

有一条记录:

45 * * * 1 script.sh
Run Code Online (Sandbox Code Playgroud)

45 0-23 * * 1 script.sh
Run Code Online (Sandbox Code Playgroud)

预期的效果是在每周一每小时 45 分钟后运行脚本。

它们相同吗?如果不是,有什么区别?

linux cron syntax

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

shell 脚本错误:语法错误:“(”意外

我已经检查了有关此错误的上一篇文章。仍然没有得到解决方案的工作。这是我的 bash 脚本。有人可以帮我解决这个问题吗?我已经使用https://www.shellcheck.net/查看任何错误。我没有找到。

错误:

Dockerfunctiontest.sh: 2: Dockerfunctiontest.sh: Syntax error: "(" unexpected
Run Code Online (Sandbox Code Playgroud)

脚本:

#!/bin/bash
function BuildSimpleContainer ()
{
docker search mariadb
docker pull mariadb:latest
docker run --name mariadbtestfour -e MYSQL_ROOT_PASSWORD=mypass -d mariadb --log-bin --binlog-format=MIXED
docker exec -it mariadbtest bash
apt-get -qq update
apt-get -qq -y install curl
apt-get -qq -y install wget
apt-get update
apt-get install apt-transport-https
apt-get update
cd /home
mkdir mdsd
cd mdsd/
wget '<blob url to pfx file>'
echo "certififcate Downloaded"
wget '<blob url file1>'
echo …
Run Code Online (Sandbox Code Playgroud)

shell bash shell-script syntax

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

标签 统计

syntax ×10

bash ×7

shell ×2

shell-script ×2

cron ×1

find ×1

linux ×1

regular-expression ×1

remind ×1

scripting ×1

variable ×1

zsh ×1