- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
考虑以下简单的 shell 脚本:
rm -rf bar \"bar\"
mkdir -p bar
touch bar/baz
echo "bar"/*
我用 bash、ksh、zsh 和 dash 得到了预期的输出,但我没有得到它与豪华:
susam@debian:~$ bash foo.sh
bar/baz
susam@debian:~$ ksh foo.sh
bar/baz
susam@debian:~$ zsh foo.sh
bar/baz
susam@debian:~$ dash foo.sh
bar/baz
susam@debian:~$ posh foo.sh
bar/*
我想了解 posh 的行为是否符合 POSIX 标准,或者它是否是错误。
POSIX 文档中的相关部分似乎是“2.6 Word Expansion”:
他们都提到路径名扩展发生在引用删除之前。
- Pathname expansion (see Pathname Expansion) shall be performed, unless
set -f
is in effect.- Quote removal (see Quote Removal) shall always be performed last.
考虑到这一点,豪华行为看起来是正确的,因为 "bar"/*
在引号删除之前与上面的任何路径都不匹配,因此不会发生路径扩展。
所以这让我怀疑如果有一个字面上名为 "bar"
的目录,即引号是目录名称的一部分,那么 posh 会匹配它。但以下更改后的脚本表明这不是真的。
rm -rf bar \"bar\"
mkdir -p \"bar\"
touch \"bar\"/baz
echo "bar"/*
这是输出:
susam@debian1:~$ bash foo2.sh
bar/*
susam@debian1:~$ ksh foo2.sh
bar/*
susam@debian1:~$ zsh foo2.sh
foo2.sh:3: no matches found: bar/*
susam@debian1:~$ dash foo2.sh
bar/*
susam@debian1:~$ posh foo2.sh
bar/*
因此 posh 中的模式 "bar"/*
既不匹配路径 bar/baz
也不匹配路径 "bar"/baz
。那匹配什么呢?豪华行为是错误还是功能?
以下是版本详细信息,以防对您有所帮助:
susam@debian:~$ cat /etc/debian_version
8.3
susam@debian:~$ dpkg -l bash ksh zsh dash posh
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-===========================-==================-==================-============================================================
ii bash 4.3-11+b1 amd64 GNU Bourne Again SHell
ii dash 0.5.7-4+b1 amd64 POSIX-compliant shell
ii ksh 93u+20120801-1 amd64 Real, AT&T version of the Korn shell
ii posh 0.12.3 amd64 Policy-compliant Ordinary SHell
ii zsh 5.0.7-5 amd64 shell with lots of features
最佳答案
这是 posh
中的错误 -- 请参阅错误 #636601 .从 posh
版本 0.12.6 开始,它仍然是开放的。
附于discussion在那个错误中你会发现一个 patch .应用它时,posh
的行为类似于 bash
(因此在您的第一个示例中,echo "bar"/*
给出 bar/baz
)。
此外,bash
(和 patched posh
)的行为确实符合 POSIX。标准说
- Quote removal (see Quote Removal) shall always be performed last.
这意味着字面意思,作为一个纯句法操作,用于在最后一步中删除保护引号。正如 hek2mgl 所指出的,引号的语义 含义仍适用于前面的步骤。 (否则,例如 "*"
这样的引号根本不会有任何效果。)
所以转念一想,这个结论是不正确的:
Considering this, the posh behaviour looks right because "bar"/* does not literally match any path above before the quote removal, so path expansion does not occur.
关于linux - 为什么在双引号内指定部分路径时 posh 无法执行路径名扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37227859/
您好,我是 Git 和 Hg 的忠实粉丝,在很多项目中都必须同时使用它们。我目前使用 Posh-Hg,这是一个 powershell 插件,可以将当前分支和未完成的提交放在你的 powershell
所以我试着为Windows安装了oh-my-posh。安装模块oh-my-posh -Scope当前用户。并打字。Get-Posh主题。查看我下载的可用主题。但我收到了这条消息。有谁可以帮我?
Windows 终端 - 通过 oh-my-posh/posh-git Set-Theme 错误自定义 PowerShell? 我按照 Microsoft 链接的确切教程进行操作:enter link
我想在 cmder powershell 中使用 git。 错误 Cmder 打印出如下错误: Missing git support, install posh-git with 'Install-
关闭。这个问题是not about programming or software development .它目前不接受答案。 这个问题似乎不是关于 a specific programming
我正在尝试从机器 A 运行 PS Remote session 以访问机器 B。两者都在同一个域中并且 Kerberos 身份验证正在工作,我可以建立一个 PS Remote session 。 我正
我正在从 Web 服务解析 JSON 以获取我的任务(使用 TimeFlip)。现在,我返回每个任务、发生时间和持续时间,因此数据如下所示: (taskname, start, durationinS
我喜欢 posh-git powershell env for git但在某些(非常大的)存储库上,它会明显减慢 ps 提示。 我想知道是否可以在某些特定的存储库上禁用它 最佳答案 为了性能,他们确实
我有一个 CSV 文件,其内容如下: A,B,C D,"E,F",G H,I,"J,K,L" 我需要删除引号之间的逗号(也删除引号,但这并不那么重要): A,B,C D,EF,G H,I,JKL 我看
我有一个旧版本的 posh-git 我想更新(同时尝试解决缓慢的 powershell 启动问题) 我从 repo 中提取了最新的内容,当我尝试执行 .\install.ps1 时,我得到了 It s
考虑以下简单的 shell 脚本: rm -rf bar \"bar\" mkdir -p bar touch bar/baz echo "bar"/* 我用 bash、ksh、zsh 和 dash
我为 Windows PowerShell 安装了 posh-git,它在 shell 中运行良好。但是,它也应该在包管理器控制台中工作。它确实有效,但它不像普通的 powershell 窗口那样显示
我想在笔记本电脑上安装 posh-git,但是当我尝试使用命令“PowerShellGet\Install-Module posh-git -Scope CurrentUser -AllowPrere
一直在尝试使用 posh-ssh 连接到 sftp。当我运行它时工作正常,当我尝试通过 Windows 任务调度程序运行它时它不起作用。 我尝试切换要运行脚本的用户,例如管理员、我自己、系统等。 我曾
在powershell中,如果我进行REST调用并收到任何类型的json响应,则可以轻松地将$json | ConvertFrom-Json转换为适当的对象,以便可以进行修改,呈现特定的值。 似乎在G
我已经为此苦苦挣扎了一天。基本上,我想使用每天在我的 Windows 计算机上运行的 powershell 脚本来备份我们网站空间上的 MySQL 数据库。 当我使用 Putty 并输入以下命令时,会
首先,我在 oh my posh 中使用 hotstick.minimal 主题。它看起来像这样。 如您所见,当前的 venv 看起来不太好。我对 JSON 文件做了一些更改。然后它看起来像这样。 我
我正在尝试将 posh-git 安装到 Visual Studio 包管理器控制台(与 2012 相比),但在 poshgit 目录中运行 .\install.ps1 并重新加载配置文件时出现以下错误
我正在尝试从 Windows 10 上运行的 PowerShell 脚本重启 Linux 机器。我使用 Posh-SSH 模块。我通过 SSH session 发送的所有其他命令工作正常,但无论我尝试
我正在使用 posh-git 将 git 信息添加到我的 PowerShell 提示符中。我想让我的提示包含远程存储库名称,如 the examples但找不到这样做的方法。 下面是我的个人资料和我的
我是一名优秀的程序员,十分优秀!