我从 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 文档是什么?
这个问题是关于在 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 下的匹配表达式中编写任意正则表达式文字?
我知道这\是一个转义字符,但是当我\在 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)
我不需要终止。
我想知道 while 循环如何评估其循环条件。在手册页中它写道:
而列表-1; 做列表-2;完毕
只要列表 list-1 中的最后一个命令返回退出状态为零,while 命令就会连续执行列表 list-2。
和
列表
列表是由运算符 ;、&、&& 或 || 之一分隔的一个或多个管道的序列,并且可选地以 ;、& 或 之一终止。
和
管道
管道是由一个控制运算符分隔的一个或多个命令的序列 | 或|&。管道的格式是:
Run Code Online (Sandbox Code Playgroud)[time [-p]] [ ! ] command [ [|?|&] command2 ... ]
这意味着:
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) 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) 此文件中的语法错误是什么?我看不出来
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 变量中可接受的字符是什么?
有人可以指出我 bash 手册页中描述 bash 变量可接受名称的地方吗?
我查看并提出了很多信息(请参阅问题编辑),但没有明确的答案。
我一直在尝试使用 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 天触发(在这个例子的情况下),然后每天触发。我如何实现这一目标?(不同的语法也可以,但其他人也没有达到我想要的)
有一条记录:
45 * * * 1 script.sh
Run Code Online (Sandbox Code Playgroud)
和
45 0-23 * * 1 script.sh
Run Code Online (Sandbox Code Playgroud)
预期的效果是在每周一每小时 45 分钟后运行脚本。
它们相同吗?如果不是,有什么区别?
我已经检查了有关此错误的上一篇文章。仍然没有得到解决方案的工作。这是我的 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)