- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在运行命令 find 。 -name *.bak
并收到错误 “路径必须先于表达式”
错误。这个问题已经回答了,回答的很好,但是我不明白的是,为什么 bash 在运行 find 命令之前扩展通配符? original example .
上面写着 find 。 -name *.bak
扩展为 find 。 - 名称 tim.bak example.bak
。有人可以解释为什么要扩展它吗,我不明白为什么对 glob 具有此功能是个好主意。
最佳答案
这是一个在 Unix 历史上很早就做出的设计决定。文件名通配符在某些时候需要扩展,但是可以选择是否应该由命令解释器(又名 shell)完成,并将结果(匹配文件列表)交给可执行文件,或者命令解释器是否应该只将给定的内容传递给可执行文件,并让它进行扩展。不同的操作系统以不同的方式执行此操作; unix 是第一种,但 VMS(我在迁移到 unix 之前使用过)是第二种方式。两者各有优缺点。
unix 方式的主要优点是通配符扩展代码只需在一个地方编写和使用:在 shell 中。命令很简单,不必担心。其次,您可以通过在一个地方进行更改来改进/扩展匹配语法(例如 bash 的 extglob 语法)。第三,您可以在所有不同的命令之间获得一致的扩展语法(相对于必须为不同的命令学习不同的规则,例如基本的、扩展的、与 perl 兼容的正则表达式一团糟)。
VMS 方式的主要优点是可执行程序知道参数的含义,并且可以适本地更改/抑制扩展。例如,find
不会在当前目录中扩展通配符,grep
不会尝试扩展正则表达式模式,就好像它是文件通配符一样,scp
可以在远程计算机上 扩展通配符,等等。第二个优点是通配符可以以 unix 系统根本不允许的方式使用,因为程序有更深入地了解参数是如何指定的;例如 rename *.jpeg *.jpg
是(如果我没记错的话)一个非常好的 VMS 命令,它完全按照它看起来应该做的做。
[编辑] 另一个优点是它避免了文件名被误认为命令选项的风险。对于 unix 方法,这可能是一个严重的安全问题,因为任何可以控制文件名的人也可以控制使用这些文件的命令和脚本。例如,创建名为“-e somecommand”的文件会导致 rsync -t * foo:src/
在远程计算机上执行 somecommand
。 This article给出了更多的例子。
每个程序都需要进行自己的通配符扩展并没有您想象的那么糟糕。有处理扩展的标准库函数,所以程序需要做的就是调用它,然后处理生成的文件列表,没什么大不了的。这些库函数可以像 shell 语法一样进行扩展,并且对它们进行标准化可以提供跨程序等方面的一致性。
您可能从上面可以看出,我总体上认为 VMS 方式更好。对于程序员来说,这需要多做一些工作,但在可用性和功能方面具有显着优势。但我敢肯定,这是 unix 人中的少数人的观点,而且无论如何,要改变 unix 的工作方式需要付出大量的努力,所以只要 unix 还是 unix,它就不会改变改变。
关于linux - 为什么命令在运行之前会被 Bash 展开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50127424/
如何在代码中展开/折叠WPF扩展器?我需要这样做才能在其中初始化控件。 最佳答案 使用IsExpanded属性,将其设置为true以使内容可见: myExpander.IsExpanded = tru
Powershell 展开让我发疯。 我有以下代码可以从交换收件人处检索电子邮件地址。我使用 ArrayList 是因为当您希望能够从数组中删除项目时,很多人都建议使用它。 $aliases = Ne
是否可以展开/折叠数据表中的子表?我的子表包含与其上方行相关的信息,我想显示/隐藏图像的点击。只是想知道我会怎么做? 这是我目前使用的:
我正在尝试创建一个可扩展的文本区域,仅当该框为空时,该区域才会折叠回其原始高度。如果它不为空,那么我希望文本区域保持扩展并根据需要增长(即,当用户输入更多文本时增长)。文本区域永远不应该隐藏输入的文本
当尝试将 nestedSortable jQuery 插件与其网站上提供的示例一起使用时,该插件无法正常工作。 拖放可以工作,但是当我需要折叠/展开时就会出现问题。我使用了另一个问题中建议的解决方案,
我有一个显示嵌套数据的表。数据如下所示: Objective 1 Objective 1.1 Objective 1.1.1 Objective 1.2
我正在使用 jQuery 从屏幕左侧展开/缩回菜单栏。 这是我到目前为止所拥有的: $(document).ready(function(){ $('.menu-button').on("clic
如何根据类别向页面上的图像添加隐藏/显示(折叠/展开)功能? 我希望具有特定类的图像在加载时折叠,并在 JS 中定义一些任意标记(比方说, Show ),然后在扩展中具有不同的任意标记( Hide )
我需要在折叠和展开后触发事件调整大小。当我尝试使用 SWT.Collapse 和 SWT.Expand 执行此操作时,树上没有任何更改,因为它在发生之前就已触发。有什么办法吗? 最佳答案 尝试调用 D
我有一个如下所示的域: package object tryme { type ALL = AlarmMessage :+: PassMessage :+: HeyMessage :+: CNil
我有一个扩展器列表,我想用全局切换按钮控制其展开状态(IsExpanded),该按钮应该在展开/折叠状态之间切换。 到目前为止,我得到的解决方案是通过将扩展器的 IsExpanded 状态绑定(bin
我试图根据 QWidget 是否展开/折叠来自动调整其大小。我尝试了几种发布的方法here和 here . 我没有设法采用这些,以便它按照我想要的方式工作:我希望 QWidget 在展开时调整自身大小
我正在尝试显示对象模型(机器人)列表,这些模型有一个可以是另一个机器人的字段 Parent。 我已经使用 Django 的 MPTT 实现了一个嵌套列表: {% load mptt_tags %}
鉴于下表/代码,我想添加两项。我不太了解 JavaScript,这段代码是另一个程序员留下的。该代码在所有其他方面都按预期工作。 这是两个项目: 表格应该以折叠状态开始。所有节点都应该是崩溃到“祖 p
我想要一张可以展开或折叠的表格。我的要求是当我点击表格行然后隐藏行显示或者当我点击其他表格行然后上一个打开的行隐藏或显示相对隐藏行。我发现一个 jquery jxpand 非常适合我,它显示隐藏的行但
如果当您向下滚动页面时元素展开或折叠,页面会突然重置并且焦点会移动到页面顶部。 有什么方法可以防止页面移动或使其不那么突然? $(document).ready(function () {
我正在使用以下代码来扩展特定的线性布局,并且遵循了本教程 http://gmariotti.blogspot.sg/2013/09/expand-and-collapse-animation.html
当垂直偏移超过特定阈值时,如何使android中的可折叠工具栏自动折叠/展开? 例如,如果垂直偏移超过 getScrollRange() 的半点,则可折叠工具栏应自动展开,低于该阈值时应折叠。 最佳答
http://t-webdesign.co.uk/new/ 如何在不使用固定高度属性的情况下让灰色 div (#content_right) 扩展到与左侧 div 相同的大小? 谢谢 最佳答案 你可能
设置一个简单的 WordPress 博客,仅包含一个页面,即博客存档。但我遇到了一个问题,我想要切换摘录和内容显示更多/显示更少的功能,以便访问者可以轻松浏览同一页面上的帖子,而无需页面重新加载或被发
我是一名优秀的程序员,十分优秀!