我看过类似的问题并尝试了大多数建议,但它们都没有让我有任何进展,即使我认为我有一个相当简单的任务:S。我对这整件事相当陌生,所以我已经不知道该尝试什么或我做错了什么......
因此,任务是获取列出的文件行(使用 grep),其中包含短月份名称和日期(例如 Oct 22)。该文件中有一个长格式列表(包含在当前日期创建的文件),因此应该有一些结果。然而,我得到的结果是只检查并发现了月份,而没有检查和发现当天。
到目前为止我尝试过的一些更明智的事情:
grep $(date +"%b %e") *filename*
Run Code Online (Sandbox Code Playgroud)
然后我得到一行“grep:22:没有这样的文件或目录”和一个包含该月(“十月”)所有结果的列表。+%d %e使用or+'%d %e'或'+%d %e'代替 的+"%d %e";结果相同$()。(我这一天也有一段时间有 %d,这没有什么区别,而且据我所知,无论如何也不重要,因为相关日期现在是 22 日。)
为什么这里不考虑这一天?
我正在学习 shell 脚本,我正在编写一个脚本,其中列出了用户具有“7”权限的文件,即“rwx”。到目前为止,我已经写了这个:
for F in *
do
a= $(stat -c "%a" "$F")
echo $a
if ((b==7))
then
echo $F
fi
done
Run Code Online (Sandbox Code Playgroud)
这里a的值为“1”。我在这里做错了什么?
当我在中尝试以下表达式时,bash收到一条奇怪的错误消息:
[: -lt: unary operator expected
Run Code Online (Sandbox Code Playgroud)
首先是函数定义
some_func () {
(( 3 + 5 ))
}
Run Code Online (Sandbox Code Playgroud)
还有表情
[ $(some_func) -lt 10 ] && true
Run Code Online (Sandbox Code Playgroud)
我想问题是将运算符-lt与命令替换和/或算术扩展混合在一起?
退出代码$?为 2,消息为an unary op was expected。
为什么当您运行替换命令时,执行顺序会被破坏,如下例所示。首先chmod执行命令,echo 1然后echo 2?
echo $(echo 1; echo 2; chmod 444 nonexistent_file)
Run Code Online (Sandbox Code Playgroud)
结果:
chmod: Cannot access 'nonexistent_file': No such file or directory
1 2
Run Code Online (Sandbox Code Playgroud) 在切换到 Fish shell 之前,我经常使用zshwith中的各种命令which some_command。一个例子可能是:
$ file `which zsh`
/opt/local/bin/zsh: Mach-O 64-bit executable arm64
/bin/zsh: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64
- Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e
- Mach-O 64-bit executable arm64e]
/bin/zsh (for architecture x86_64): Mach-O 64-bit executable x86_64
/bin/zsh (for architecture arm64e): Mach-O 64-bit executable arm64e
Run Code Online (Sandbox Code Playgroud)
当我尝试这样做时fish失败了:
$ which zsh
/opt/local/bin/zsh
$ file `which zsh`
`which: cannot open ``which' (No such file or directory)
zsh`: …Run Code Online (Sandbox Code Playgroud) locale管道来获取月份名称,用逗号tr分隔它们,然后用大括号括起来并传递给mkdir. 但整体被视为一根弦。有办法避免这种情况吗?16:07: temp \xe2\xa7\xb2 mkdir {$(locale mon | tr \\; ,)}\n\n16:18: temp \xe2\xa7\xb2 ls -lh\ntotal 4.0K\ndrwxr-xr-x. 2 john john 4.0K Dec 11 16:18 {January,February,March,April,May,June,July,August,September,October,November,December}\n\n16:18: temp \xe2\xa7\xb2 \nRun Code Online (Sandbox Code Playgroud)\n 我想知道为什么会在我的外壳中打印额外的回声。我使用的是bash4.2.46(1) 版。
echo `echo `echo $SHELL``
Run Code Online (Sandbox Code Playgroud)
一个有趣的问题是,如果我'``'用$()它替换不会打印额外的回声:
echo $(echo `echo $SHELL`)
Run Code Online (Sandbox Code Playgroud)
我发现它以奇数echo命令号打印额外的回声:
echo `echo `echo `echo `echo $SHELL````
Run Code Online (Sandbox Code Playgroud) 我试图!!在我新安装的 debian 上使用,但出现以下错误:
$ sudo !!
sudo: !!: command not found
Run Code Online (Sandbox Code Playgroud)
我使用!!?
另外!!,我可以调用什么,以便我实际上可以在 google 上搜索相关信息?
bash ×5
shell ×3
shell-script ×2
arithmetic ×1
command-line ×1
dash ×1
date ×1
debian ×1
echo ×1
fish ×1
grep ×1
parameter ×1
test ×1
variable ×1