我试图了解逻辑运算符优先级在 bash 中是如何工作的。例如,我会期望以下命令不会回显任何内容。
true || echo aaa && echo bbb
Run Code Online (Sandbox Code Playgroud)
然而,出乎我的意料,bbb被打印出来了。
有人可以解释一下,我如何理解bash 中的复合&&和||运算符?
我试图使用grep仅显示包含两个单词中的任何一个的行,如果其中一个出现在行中,但如果它们在同一行中则不显示。
到目前为止,我已经尝试过, grep pattern1 | grep pattern2 | ...但没有得到我预期的结果。
该strings命令的行为很奇怪,显然即使驱动器空间不足,它也不会停止写入文件。或者也许我错过了什么?
我运行以下命令:
# strings /dev/urandom > random.txt
Run Code Online (Sandbox Code Playgroud)
这一直在运行,即使在填充磁盘(常规 USB 闪存)后也没有停止。
然后为了更快,我创建了一个 ramdisk 并再次尝试相同的命令。它也没有停止。
我知道这urandom不是常规文件,并且strings的输出也被重定向,但是在上述两种情况下,该cat命令在没有更多空间时报告了错误。
# cat /dev/urandom > random.txt
cat: write error: No space left on device
Run Code Online (Sandbox Code Playgroud)
从APUE阅读,只是感到好奇:
每次用户登录 UNIX 系统和每次有人执行
ls -l命令时都会使用密码文件。
在这篇 Ask Ubuntu 帖子PATH中,我使用 globstar 在未设置时定位文件:
$ shopt -s globstar; for v in /**/vim; do [[ -x $v && -f $v ]] && echo "$v"; done
/etc/alternatives/vim
/usr/bin/vim
/usr/bin/X11/vim
Run Code Online (Sandbox Code Playgroud)
现在想来,这个输出似乎有点奇怪。/usr/bin/X11是一个符号链接/usr/bin:
$ readlink /usr/bin/X11
.
Run Code Online (Sandbox Code Playgroud)
因此,那里有X11s 的无限递归,但只有第一个出现在输出中。奇怪的是, just a根本/usr/**没有下降到:X11
$ printf "%s\n" /usr/bin/** | grep X11
/usr/bin/X11
Run Code Online (Sandbox Code Playgroud)
如何协调第一个和最后一个输出?
来自评论:
我在 Ubuntu 16.04 上使用 Bash 版本 4.4.18(1)。
假设我创建了 100 个文件,每个文件的大小为 30MB 的随机文本数据。现在我创建一个压缩率为 0 的 zip 存档,即zip dataset.zip -r -0 *.txt. 现在我只想从这个存档中提取一个文件。
如上所述这里,也有解压/从归档中提取文件的方法有两种:
O(1)复杂度)O(n)复杂性)unzip 使用哪种方法?从我的实验来看,它似乎使用了方法 2?
所以我有一个很长的电子邮件列表,我想根据电子邮件字符串的几个部分来搜索这些。
我想更有效地尝试搜索这些电子邮件,因此我想匹配电子邮件的开头。是否有一种简单的方法来匹配第一个字符/前几个字符、@ 和以下字符以及电子邮件的结尾。
这是一个示例搜索:
cal****@a**m
Run Code Online (Sandbox Code Playgroud)
因此,如果我使用以下列表中的搜索,它只会拉出前 2 个
callum@aol.com
callumsmith@aol.com
callumfrrg@test.com
someemail@test.com
Run Code Online (Sandbox Code Playgroud)