我在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/foo为2路和返回的"文件部分" 既(即,space和foo).这个奇怪的部分TARGET是正确逃脱的; 不知何故,在规则内部或内部$(notdir),反斜杠转义被忽略.
我在这做错了什么?
我正在寻找一种将包含双引号的参数传递给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)
所以我有两个问题...
这是询问此问题的其他线程,并且通过不使用引号来解决:
我实际上想在引数中使用引号的情况下,我看不到任何回应
我无法弄清楚这一点,也许我因为长期关注同样的东西而变得盲目......
我在 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) 根据Google Shell Style Guide,我应该:
除非需要仔细的不引用扩展,否则始终引用包含变量,命令替换,空格或shell元字符的字符串.
也许我误解了"命令替换"的含义,但我想知道是否需要在以下示例中使用引号:
VAR="$(echo foo bar)"
Run Code Online (Sandbox Code Playgroud) 我有这个 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) 我正在使用环境文件来配置网络应用程序。最近我需要导出这样的值:
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
我有一个运行的服务,它使用发送给它的正则表达式并使用它从字符串中检索一个值.
我可以在类中创建一个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调用时,它会抛出异常.
在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”。知道如何解决这个问题吗?
编辑:从这个问题测试的解决方案无济于事。
我正在编写一个 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) 我需要使用 pandas to_csv 函数生成一个 csv。我试过quote=csv.QUOTE_NONNUMERIC。但是对于日期时间列之一,我不需要双引号。
有没有办法选择我们想要双引号的列?