我有一个文件,我想用"Nov 30"
或"Nov 30"
等字符串来显示行(基本上我不想指定中间的空格数。
在终端这可以,我只是这样做:
grep 'Nov * 30' file
然而,为了我的目的保持一般是很好的,所以实际上我想做的事情如下:
grep "$(date +%b) * $(date +%d)" file
这很好但我真的想通过ssh这样做,所以它就像
ssh -t host "grep "$(date +%b) * $(date +%d)" file"
此时我遇到了问题。它不是仅仅为11月30日类型的日期字符串打算,而是返回各种不同的11月日期。我觉得这个问题与双引号的使用有关(或许-t参数的第一组双引号会影响第二批,但我看不到如何绕过它),我从{ {3}}回答“bash会在本地机器上评估和替换双引号内的变量,但会在单引号内的目标机器上执行”。所以我尝试用
替换上面的内容ssh -t host "grep '$(date +%b) * $(date +%d)' file"
但是现在grep根本没有返回任何结果!我认为这是因为我正在为文字“$(日期+%b)...”而不是替换的“11月”,但后来我不明白为什么第一次使用双引号的尝试没有工作
欢迎任何帮助
答案 0 :(得分:1)
逃避你的报价:
ssh -t host "grep \"$(date +%b) * $(date +%d)\" file"
答案 1 :(得分:0)
或者,单引用您希望在远程计算机上执行的命令行。 (在这种情况下,date
命令将在远程端执行。)
ssh -t host 'grep "$(date +%b) * $(date +%d)" file'
答案 2 :(得分:0)
在此版本中,date
命令将在本地执行:
ssh -t host "grep '$(date +%b) * $(date +%d)' file"
在此版本中,date
命令将在远程主机上执行:
ssh -t host 'grep "$(date +%b) * $(date +%d)" file'
当您的本地PC和服务器位于不同的时区时,这会有所不同。例如,现在是12月1日在法国,但是11月30日在我在美国的服务器上。
在第一个版本中,双引号内的$()
在发送到服务器之前进行评估。因此,发送到服务器的命令在我的时区中为grep 'Dec * 1' file
。
在第二版中,单引号内的$()
在发送到服务器之前不会被评估。因此,发送到服务器的命令为grep "$(date +%b) * $(date +%d)" file
,因此服务器将在双引号内评估$()
。