标签: quoting

在带空格的路径上使用Make $(dir)或$(notdir)

我在Makefile中使用类似于以下的代码:

empty:=
space:= $(empty) $(empty)
path_escape = $(subst $(space),\$(space),$(1))

TOP=$(call path_escape,$(abspath .))
TARGET=$(TOP)/foo

$(info TOP='$(TOP)')
$(info TARGET='$(TARGET)')

all: $(TARGET)

$(TARGET):
    touch '$(notdir $@)'

.PHONY: $(TARGET)
Run Code Online (Sandbox Code Playgroud)

如果我在没有空格的目录中使用space-test它,比如说,它可以正常工作:

$ make
TOP='/tmp/space-test'
TARGET='/tmp/space-test/foo'
touch 'foo'
Run Code Online (Sandbox Code Playgroud)

但是,如果我在一个带空格的目录中使用它,比如说space test,那就$(notdir)错了:

TOP='/tmp/space\ test'
TARGET='/tmp/space\ test/foo'
touch 'space foo'
Run Code Online (Sandbox Code Playgroud)

这里发生的事情是$(notdir)解释/tmp/space test/foo2路和返回的"文件部分" (即,spacefoo).这个奇怪的部分TARGET是正确逃脱的; 不知何故,在规则内部或内部$(notdir),反斜杠转义被忽略.

我在这做错了什么?

makefile path quoting

5
推荐指数
1
解决办法
1万
查看次数

使用Python将包含双引号的参数传递给子流程

我正在寻找一种将包含双引号的参数传递给python的子进程模块的方法,而不会将双引号转义。

当引号围绕arg时,我已经看到过几次不同的问题,但是答案通常是删除引号。我遇到的问题是引号是参数的一部分,必须传递给脚本,而不必在每个引号前加反斜杠

例:

我正在调用subprocesTest.bat,这是一个简单的批处理脚本,它接受一个参数并回显它:

echo "%~1"
Run Code Online (Sandbox Code Playgroud)

我使用包含引号的arg从python调用批处理脚本:

import subprocess
test_string = 'Bill said "Hi!"'
cmd = ["subprocesTest.bat",
       test_string
       ]

p = subprocess.Popen(cmd)
p.wait()
Run Code Online (Sandbox Code Playgroud)

预期输出:

“比尔说:“嗨!”

实际输出:

“比尔说\“嗨!\”

从命令行调用相同的批处理脚本时,我可以得到预期的输出,如下所示:

subprocesTest.bat“比尔说”嗨!“

查看源代码,subprocess.py的list2cmdline函数记录为:

 3) A double quotation mark preceded by a backslash is
   interpreted as a literal double quotation mark.
Run Code Online (Sandbox Code Playgroud)

但是,如果我逐步执行此功能,则看不到不加反斜杠就不能传递双引号的方法:

        elif c == '"':
            # Double backslashes.
            result.append('\\' * len(bs_buf)*2)
            bs_buf = []
            result.append('\\"')
Run Code Online (Sandbox Code Playgroud)

所以我有两个问题...

  • 是否可以将arg传递给包含双引号且不带反斜杠的子流程
  • 如果不可能,有人可以向我解释为什么这样设计功能吗?函数的doc字符串中的第3项似乎表明我可以通过在反斜杠前加上反斜杠来传递文字引号,但这不会产生我想要的行为。我看错文档了吗?

这是询问此问题的其他线程,并且通过不使用引号来解决:

我实际上想在引数中使用引号的情况下,我看不到任何回应

python quotes subprocess quoting double-quotes

5
推荐指数
1
解决办法
7249
查看次数

使用 Python 的 QUOTE_NONNUMERIC 导入 csv 无法按预期工作

我无法弄清楚这一点,也许我因为长期关注同样的东西而变得盲目......

我在 CSV 文件中有这样的行:

""BIN"",""Afg"",""SONIC/SONIC JET/"",1,8.9095,""Due to the dynamic nature of the exemptions granted to many operators, the Contract Price does not reflect V.A.T. / G.S.T., Mineral Oil Taxes, Federal Excise Taxes or other taxes to which an operator may be exempt.  Please contact your salesperson or World Fuel Services if you require assistance in generating a fuel price estimate."",""N/A"",""01-NOV-2013"
Run Code Online (Sandbox Code Playgroud)

我正在尝试像这样导入:

data = csv.DictReader(open(newdatafile), delimiter=',', quoting=csv.QUOTE_NONNUMERIC)
data.fieldnames = [
    'iata', 'country', 'fbo', 'quantity', 'price', 'remarks', 'special', 'validdate'
]

for row …
Run Code Online (Sandbox Code Playgroud)

python csv quoting double-quotes

5
推荐指数
1
解决办法
2万
查看次数

我需要引用命令替换吗?

根据Google Shell Style Guide,我应该:

除非需要仔细的不引用扩展,否则始终引用包含变量,命令替换,空格或shell元字符的字符串.

也许我误解了"命令替换"的含义,但我想知道是否需要在以下示例中使用引号:

VAR="$(echo foo bar)"
Run Code Online (Sandbox Code Playgroud)

bash shell quoting

5
推荐指数
2
解决办法
867
查看次数

Ansible:如何修复 to_nice_yaml 输出引用和换行符?

我有这个 YAML 文件(我将我的问题精简到最低限度):

scalar: simple_value
empty:
list:
  - 1
  - 2
  - 3
complex:
  - first:
      one: 1
      two: 2
  - second:
      one: 3
      two: 4
weird: "{{ '{{' }} something {{ '}}' }}"
weirder: "{{ '{{' }} 'TTT' if something == 'blah' else 'FFF' {{ '}}' }}"
weirdest: "&lcub2; ansible_date_time.year &rcub2;.&lcub2; ansible_date_time.month &rcub2;.&lcub2; ansible_date_time.day &rcub2;"
Run Code Online (Sandbox Code Playgroud)

和这个剧本:

---
- hosts: localhost
  tasks:
    - name: Load
      include_vars:
        file: ./vars.yml
        name: object
    - name: Write
      copy:
        content: "{{ object | …
Run Code Online (Sandbox Code Playgroud)

yaml escaping line-breaks quoting ansible

5
推荐指数
1
解决办法
1万
查看次数

导出值包含空格的环境文件

我正在使用环境文件来配置网络应用程序。最近我需要导出这样的值:

RUBYOPT='-W:no-derecated -W:no-experimental'
Run Code Online (Sandbox Code Playgroud)

test.env它包含在具有其他配置变量的文件中。

我使用此命令导出文件中的所有环境变量:

export $(cat test.env | xargs)
Run Code Online (Sandbox Code Playgroud)

使用上面的值,该命令会给出以下错误:

-bash: export: `-W:no-experimental'': not a valid identifier
Run Code Online (Sandbox Code Playgroud)

我可以通过复制粘贴输出来导出值,cat test.env | xargs但在像上面这样的单个命令中它不起作用。

一些测试表明,当值包含空格及其后的冒号时,就会出现问题:

我需要什么样的引用魔法才能使我的环境文件再次工作?

bash shell environment-variables quoting command-line-arguments

5
推荐指数
1
解决办法
3797
查看次数

Java Regex:看后面的组没有"明显的最大长度"

我有一个运行的服务,它使用发送给它的正则表达式并使用它从字符串中检索一个值.

我可以在类中创建一个main方法并调试正则表达式(?<=\\().+?(?=\\){1}),它可以很好地工作.

但是,只要我在tomcat中部署它以远程测试,我就会得到以下异常:

Look-behind group does not have an obvious maximum length near index 19
(?<=\\().+?(?=\\){1})
                   ^
Run Code Online (Sandbox Code Playgroud)

这是解析被调用的值的函数:

private String parsePattern(String value, String pattern)
{
    String ret = "";

    Matcher m = Pattern.compile(pattern).matcher(value);
    while (m.find())
    {
        ret = m.group(0);
    }

    return ret;
}
Run Code Online (Sandbox Code Playgroud)

是什么导致它在应用程序中编译,但不能在webapp中工作?

编辑:

这与任何字符串失败,但当前正在检查的字符串是:"(Group Camp Renovation)"

当调用from时main,该方法返回"Group Camp Renovation",当通过webapp调用时,它会抛出异常.

java regex quoting

4
推荐指数
1
解决办法
1989
查看次数

ggplot 处理引用变量

ggplot()对数据框进行操作后生成绘图时,我遇到了一个意外问题。我提供了一个说明性的例子:

func <- function(){  
library(ggplot2)
df <- read.table(....)
# perform operation on df to retrieve column of interest index/number
column.index <- regexpr(...)   
# now need to find variable name for this column
var.name <- names(df)[column.index]
# also need to mutate data in this column
df[,column.index] <- df[,column.index] * 10
# generate plot
plot <- ggplot(data, aes(x=var.name))+geom_bar()
print(plot)
}
Run Code Online (Sandbox Code Playgroud)

这里 ggplot 会抛出一个错误,因为它var.name被引用了,例如,“mpg”。知道如何解决这个问题吗?

编辑:从这个问题测试的解决方案无济于事。

quotes r quoting ggplot2 dataframe

4
推荐指数
1
解决办法
2525
查看次数

BASH 脚本:何时包含反斜杠符号

我正在编写一个 BASH 脚本并且我正在使用bash命令。以下哪一项是正确的(或都不正确)?

bash $pbs_dir/${module_name}.${target_ID}.${instance_ID}.pbs
Run Code Online (Sandbox Code Playgroud)

或者

bash \$pbs_dir/\${module_name}.\${target_ID}.\${instance_ID}.pbs
Run Code Online (Sandbox Code Playgroud)

bash symbols quoting backslash

4
推荐指数
1
解决办法
1521
查看次数

使用 pandas to_csv 仅引用所需的列

我需要使用 pandas to_csv 函数生成一个 csv。我试过quote=csv.QUOTE_NONNUMERIC。但是对于日期时间列之一,我不需要双引号。

有没有办法选择我们想要双引号的列?

python csv quoting export-to-csv pandas

4
推荐指数
1
解决办法
2447
查看次数