我想对使用反引号的我的Perl程序进行单元测试.有没有办法模拟反引号,以便他们可以做一些与执行外部命令不同的东西?
另一个问题显示了我需要的东西,但是在Ruby中.不幸的是,我不能选择在这个项目中使用Ruby,也不想避免反引号.
反引号内的反斜杠(\)以非显而易见的方式处理:
Run Code Online (Sandbox Code Playgroud)$ echo "`echo \\a`" "$(echo \\a)" a \a $ echo "`echo \\\\a`" "$(echo \\\\a)" \a \\a
但是,FAQ并未分解导致这种差异的解析规则。man bash我发现的唯一相关报价是:
当使用旧式的反引号形式的替换时,反斜杠保留其字面意思,除非后面是$,`或。
The "$(echo \\a)" and "$(echo \\\\a)" cases are easy enough: Backslash, the escape character, is escaping itself into a literal backlash. Thus every instance of \\ becomes \ in the output. But I'm struggling to understand the analogous logic for the backtick cases. What is the underlying rule and how does the observed output follow …
我在使用反引号使shellcript工作时遇到问题.这是我遇到问题的脚本的示例版本:
#!/bin/sh
ECHO_TEXT="Echo this"
ECHO_CMD="echo ${ECHO_TEXT} | awk -F' ' '{print \$1}'"
result=`${ECHO_CMD}`;
echo $result;
result=`echo ${ECHO_TEXT} | awk -F' ' '{print \$1}'`;
echo $result;
Run Code Online (Sandbox Code Playgroud)
该脚本的输出是:
sh-3.2$ ./test.sh
Echo this | awk -F' ' '{print $1}'
Echo
Run Code Online (Sandbox Code Playgroud)
为什么使用变量执行命令的第一个反引号实际上并不执行完整命令,而只返回第一个命令的输出和第二个命令?我错过了一些东西,以便获得第一个反复执行命令?
所以我试图在文件中找到反引号(`),所以我跑了:
grep -irl '\`' ./*
Run Code Online (Sandbox Code Playgroud)
这似乎可以返回每个文件......
我还能尝试什么?
我在使用Lisp的反引用读取宏时遇到问题.每当我尝试编写一个似乎需要使用嵌入式反引号的宏时(例如,``(w ,x ,,y)来自Paul Graham的ANSI Common Lisp,第399页),我无法弄清楚如何以编译的方式编写代码.通常情况下,我的代码会收到一系列错误,前面是"逗号不在反引号内".有人可以为我如何编写能够正确评估的代码提供一些指导吗?
作为一个例子,我目前需要一个宏,它采用一种描述形式的规则的形式,'(function-name column-index value)并生成一个谓词lambda体,以确定由column-index特定行索引的元素是否满足规则.如果我用规则调用这个宏'(< 1 2),我希望生成一个看起来如下的lambda体:
(lambda (row)
(< (svref row 1) 2))
Run Code Online (Sandbox Code Playgroud)
我能做的最好的努力如下:
(defmacro row-satisfies-rule (rule)
(let ((x (gensym)))
`(let ((,x ,rule))
(lambda (row)
(`,(car ,x) (svref row `,(cadr ,x)) `,(caddr ,x))))))
Run Code Online (Sandbox Code Playgroud)
经过评估,SBCL会发出以下错误报告:
; in: ROW-SATISFIES-RULE '(< 1 2)
; ((CAR #:G1121) (SVREF ROW (CADR #:G1121)) (CADDR #:G1121))
;
; caught ERROR:
; illegal function call
; (LAMBDA (ROW) ((CAR #:G1121) (SVREF ROW (CADR …Run Code Online (Sandbox Code Playgroud) 假设我想用我的脚本用反引号运行一个外部程序,同时我想捕获STDOUT和STDERR,但是在两个不同的变量中.我怎样才能做到这一点?如果我运行此脚本,请参阅...
my $cmd = `snmpwalk -v $version -c $community $hostname $oid`;
Run Code Online (Sandbox Code Playgroud)
...如果没有错误一切正常但是如果命令引发错误,则该错误将打印在命令行上,我不希望发生这种情况.我也想捕获错误.屏幕上无需打印任何内容.有任何想法吗?
syntax-highlighting intellij-idea backticks webstorm template-literals
我需要做相同的事情
set ENVAR=`some-command`
Run Code Online (Sandbox Code Playgroud)
在windows/cmd.exe脚本中.Cygwin不是一个选择.
对于奖励标记:一般来说是否有一些cmd.exe等效的反引号?
我无法使用Groovy执行具有反引号的shell命令.一个简化的例子:
println "echo `date`".execute().text
Run Code Online (Sandbox Code Playgroud)
我四处寻找并试图弄清楚如何以某种方式逃脱它们,但没有运气.
我正在使用Markdown在GitHub上编写关于Markdown的教程,我想编写```但是像内联代码块一样呈现this.