我正在学习Bash,我看到了这个形式
C =示例
回声"$ C"
给出相同的表格结果
C = "示例"
echo $ C.
我想知道是否更好地将""放在变量的赋值中或者在$之后.或者如果它无动于衷.或者如果一个人认为比另一个人"更美丽".
这类似于我在stackoverflow上看到的一些其他rsync bash变量问题,但这些答案都没有解决我的具体问题.我想在bash脚本中运行以下命令,但是变量中包含rsync选项:
rsync -ahz --delete --filter=': .rsync-filter' source/ destination/
Run Code Online (Sandbox Code Playgroud)
我注意到bash实际上解释如下:
+ rsync -ahz --delete '--filter=: .rsync-filter' source/ destination/
Run Code Online (Sandbox Code Playgroud)
哪个在rsync中也可以正常工作.
当我尝试将这些值放在变量中时,我看到正在运行以下命令:
RSYNCOPTS="-ahz --delete --filter=: .rsync-filter"
rsync ${RSYNCOPTS} source/ destination/
+ RSYNCOPTS='-ahz --delete --filter=: .rsync-filter'
+ rsync -ahz --delete --filter=: .rsync-filter source/ destination/
unexpected end of filter rule: :
RSYNCOPTS="-ahz --delete --filter=': .rsync-filter'"
rsync ${RSYNCOPTS} source/ destination/
+ RSYNCOPTS='-ahz --delete --filter='\'': .rsync-filter'\'''
+ rsync -ahz --delete '--filter='\'':' '.rsync-filter'\''' source/ destination/
Unknown filter rule: `':'
RSYNCOPTS="-ahz --delete '--filter=: .rsync-filter'"
rsync ${RSYNCOPTS} source/ destination/ …Run Code Online (Sandbox Code Playgroud) 我有以下shell命令:
ssh user@host "df | grep /dev/ | \
awk 'BEGIN{print "DISK", "%USAGE", "STATUS"} {split($5, a, "%"); \
var="GREEN"; print $1, $5, var}' | column -t"
Run Code Online (Sandbox Code Playgroud)
我需要在ssh上运行它,但由于嵌套的双引号和单引号的存在,我得到语法错误.
我在引号的开头和结尾之前尝试了转义符,但它没有解决问题.
但是,在运行本地系统时,将提供以下输出:
$ df | grep /dev/ | \
awk 'BEGIN{print "DISK", "%USAGE", "STATUS"} {split($5, a, "%"); \
var="GREEN"; print $1, $5, var}' | column -t
DISK %USAGE STATUS
/dev/sda1 95% GREEN
Run Code Online (Sandbox Code Playgroud) 我想存储/c/users/me/dir name到一个变量中以将其传递给cd系统调用。
键入时有效:
$ cd '/c/users/me/dir name'
或者
$ cd /c/users/me/dir\ name
但如果我存储它则不起作用:
$ dirname="'/c/users/me/dir name'"
$ cd $dirname
$ bash: cd: /c/users/me/dir: No such file or directory
Run Code Online (Sandbox Code Playgroud)
相同的结果:
$ dirname=('/c/users/me/dir name')
Run Code Online (Sandbox Code Playgroud)
或者
$ dirname=(/c/users/me/dir\ name)
Run Code Online (Sandbox Code Playgroud)
哪种存储方式才是正确的?
所以我试图在 grep 中编写一个正则表达式来匹配方括号,即[ad]应该匹配[和]。但是我在使用捕获组和字符类时得到了不同的结果。放在'正则表达式字符串的开头和结尾的结果也不同。
所以这些是我得到的不同结果。
使用捕获组工作正常
echo "[ad]" | grep -E '(\[|\])'
[ad]
Run Code Online (Sandbox Code Playgroud)
使用捕获组而不'给出语法错误
echo "[ad]" | grep -E (\[|\])
bash: syntax error near unexpected token `('
Run Code Online (Sandbox Code Playgroud)
使用字符类[后跟]不提供任何输出
echo "[ad]" | grep -E [\[\]]
Run Code Online (Sandbox Code Playgroud)
使用字符类]后跟[正常工作
echo "[ad]" | grep -E [\]\[]
[ad]
Run Code Online (Sandbox Code Playgroud)
使用带有]后跟[和使用的字符类'不起作用
echo "[ad]" | grep -E '[\]\[]'
Run Code Online (Sandbox Code Playgroud)
如果有人能解释它们之间的区别,那就太好了。
我正在尝试在/bin/bash -c命令中导出变量。
这导致空输出:
/bin/bash -c "export FOO=foo; echo $FOO"
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?
我正在尝试创建一个简单的备忘录.如何防止在此代码中评估args表单?
(defmacro defun/memo (name args &rest body)
`(let ((memo (make-hash-table :test 'equalp)))
(defun ,name ,args
(if (gethash (loop for x in ,args collect x) memo)
(gethash (loop for x in ,args collect x) memo)
(let ((result (progn ,@body)))
(setf (gethash (loop for x in ,args collect x) memo) result)
result)))))
Run Code Online (Sandbox Code Playgroud)
错误:
; in: DEFUN ADD
; (X Y)
;
; caught STYLE-WARNING:
; undefined function: X
;
; compilation unit finished
; Undefined function:
; X
Run Code Online (Sandbox Code Playgroud) 出于某种原因,我需要以这种格式输出到 csv 并在每列名称周围加上引号,我想要的输出如下所示:
"date" "ret"
2018-09-24 0.00013123989025119056
Run Code Online (Sandbox Code Playgroud)
我正在尝试
import csv
import pandas as pd
Y_pred.index.name = "\"date\""
Y_pred.name = "\'ret\'"
Y_pred = Y_pred.to_frame()
path = "prediction/Q1/"
try:
os.makedirs(path)
except:
pass
Y_pred.to_csv(path+instrument_tmp+"_ret.txt",sep=' ')
Run Code Online (Sandbox Code Playgroud)
并得到如下输出:
"""date""" 'ret'
2018-09-24 0.00013123989025119056
Run Code Online (Sandbox Code Playgroud)
我似乎无法找到一种使用引号将列换行的方法。有谁知道怎么做?谢谢。
我的解决方案: 使用 quoting=csv.QUOTE_NONE 和 Y_pred.index.name = "\"date\"", Y_pred.name = "\"ret\""
Y_pred.index.name = "\"date\""
Y_pred.name = "\"ret\""
Y_pred = Y_pred.to_frame()
path = "prediction/Q1/"
try:
os.makedirs(path)
except:
pass
Y_pred.to_csv(path+instrument_tmp+"_ret.txt",sep=' ',quoting=csv.QUOTE_NONE)
Run Code Online (Sandbox Code Playgroud)
然后我得到
"date" "ret"
2018-09-24 0.00013123989025119056
Run Code Online (Sandbox Code Playgroud) ',lisp 中反引号表达式的作用和用途是什么?它有名字吗?它是否记录在某处?它有多普遍和有用?
例如:
(defmacro test-exp (exp)
`(format t "~&~S => ~S~%" ',exp ,exp))
Run Code Online (Sandbox Code Playgroud)
我的猜测是exp,在宏扩展时,它将采用字面上的任何内容,并',exp用它替换。(与评估exp和替换,exp它相反)。
我正在尝试使用mapconcat加入字符串列表,但无法弄清楚如何将变量包含在列表元素之一中.这就是我想要的:
(mapconcat #'identity '("" "path" "to" "someplace") "/")
=> "/path/to/someplace"
Run Code Online (Sandbox Code Playgroud)
但是当我尝试包含变量时:
(let ((path "someplace"))
(mapconcat #'identity '("" "path" "to" path) "/"))
=> Wrong type argument: sequencep, path
Run Code Online (Sandbox Code Playgroud)
这也不起作用:
(let ((path "someplace"))
(mapconcat #'(lambda (x) (format "%s" x)) '("" "path" "to" path) "/"))
=> "/path/to/path"
Run Code Online (Sandbox Code Playgroud)
任何人都能指出我在这里缺少的东西吗?