- 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/
我正在尝试在引号内使用引号。它在文本框内工作,但在我需要字符串的地方不工作。例如,第一行代码有效,但我需要将字符串作为变量。 pictureBox1.Image = MediaLib.Get["che
我需要找到一种方法来检查字符串中的双引号,以便将输出写入 XML 文档,然后在 Word 中打开。我想出了如何查找像 (') 这样的单引号,但是双引号在我的 XML 文档中引发了错误。 pr
我正在尝试在引号内使用引号。它在文本框内工作,但在我需要字符串的地方不工作。例如,第一行代码有效,但我需要将字符串作为变量。 pictureBox1.Image = MediaLib.Get["che
我定义了一个由动态变量组成的变量 var tempVar = ""; varName输出Black/Blue Mirror + some special character with single a
我在 Jenkins 管道中运行了这个 shell 脚本 def planResults = sh(returnStdout: true, script: "cd $it; PLAN=\$(terra
双引号 ("") 怎么可能有一个方法,即使您实际上没有在 String 中声明它。例如: System.out.println("".length()); "" 是否已经是一个对象,但没有在 Stri
我刚刚开始阅读“Head First Java”这本书。由于下面代码中没有空格的双引号 (""),有一个练习让我感到困惑。我想我明白了,但看起来这本书并没有解释它,我想确保我是正确的。 下面代码中双引
我有一个名为 myfield 的字段,其中包含以下字符串: {'Content-Language': 'en', 'X-Frame-Options': 'SAMEORIGIN', 'X-Generat
这是一个 nodejs 正则表达式,它将引号替换为 json 解析器接受的新模式。 var someStr = "this string has one single quote ': this st
当查询列表并将值放入变量并尝试在另一个脚本中使用该变量时,它确实获得了所需的格式。 脚本 1: cilist=$(opr-ci-list.sh -view_name TN_UD_REFRESH_MRE
我正在尝试在 powershell 中调用 curl 命令并传递一些 JSON 信息。 这是我的命令: curl -X POST -u username:password -H "Content-Ty
我使用 terraform 创建了一个 YML 管道。 它使用脚本任务并在输出中返回 Web 应用程序名称 steps: - script: | [......] terraform
我的项目由Docker包装,并在2种环境中运行:代理后面的或没有代理的。 在这种情况下,我使用php:apache镜像并通过pecl安装ext,因此必须手动设置代理 FROM php:apache R
我是 Clang-Format 的新手。 我使用 ./bin/clang-format -style=google -dump-config > .clang-format 作为我的基础 .clang
我试图在从数据库读取数据后生成 CSV 文件。现在单个数据可以包含逗号、单引号和双引号。 请告诉我如何在正则表达式的帮助下处理这种情况。 最佳答案 您可以为 CSV 文件使用不同的分隔符吗?也许是一个
我全新安装了 janus vim 插件和 macvim。 由于某种原因,当我在 macvim 中打开 .json 文件时,.json 文件中的键或值周围没有双引号。当我向下滚动文件的行时,双引号会显示
我的属性结构如下: my { property { item { "1" { value="some value"
这个问题已经有答案了: How to escape single quotes in MySQL (19 个回答) 已关闭 5 年前。 考虑这个表 CREATE TABLE name ( nom VA
我面临 SyntaxError: unterminated string literal* 尝试在文本区域中设置值时出错。 这里,文本值是动态的,从后端接收,可以包含任何字符。 经过我的第一次调查,我
我正在尝试设置包含单引号的属性值: var attr_value = "It's not working"; var html = "Text"; $('body').html(html); 但是,我
我是一名优秀的程序员,十分优秀!