考虑在 bash 命令行中输入以下代码片段:
\n$ echo $(( $(wc -l letter.txt | cut -c1-4)/66 + 1))\nRun Code Online (Sandbox Code Playgroud)\n假设letter.txt存在并且有 66*4 行,那么这会将字符串 5 放在命令行上。现在我无法理解的是,根据我对命令行处理的了解,这个结论是如何得出的。
我的书(Sobell 的《Linux 实用指南》 , 4e)说
\n\n\nBourne Again Shell 按以下顺序扫描每个标记以查找各种类型的扩展和替换。大多数这些过程将单词扩展为单个单词。只有大括号扩展、单词分割和路径名扩展可以更改命令中的单词数(变量“$@”\xe2\x80\x94 的扩展除外,请参见第 474 页)。
\n\n
\n- 支撑扩展(下一页)
\n- 波形符扩展(第 368 页)
\n- 参数和变量扩展(第 368 页)
\n- 算术展开(第369页)
\n- 命令替换(第 371 页)
\n- 分词(第 372 页)
\n- 路径名扩展(第 372 页)
\n- 进程替换(第 374 页)
\n- 删除报价(第 374 页)
\n
根据上述内容,算术扩展似乎会首先求值,如果是这样,则令牌$(wc -l letter.txt | …
我正在阅读 Sobell 的《Linux 命令、编辑器和 Shell 编程实用指南》,4e。早些时候,他谈到了.和..,并说它们是工作目录和工作目录父目录的“路径名的同义词”。我的问题是我是否应该将它们视为相对路径名或绝对路径名的同义词。最后,我认为我的误解与不了解 Linux 系统如何解析路径名有关。
举个例子:假设我输入如下命令
cd ..
我是否应该将 shell 视为用 .. 替换当前工作目录的父目录的绝对路径名?或者,当我给出相对路径名时,“分辨率”的行为是否有所不同(这里似乎是这种情况,因为我没有以斜杠 / 开始我的路径)?在某种程度上,我想这个问题可以表述为“相对路径命名是绝对路径命名的特殊情况吗?因为每个相对路径名都替换为适当的绝对路径?”