当我尝试执行这样的命令时:
ssh host_1“cat test_file | sed's / $ / \ tOK /'”
我收到了这个错误:
非法变量名称。
有什么问题?
答案 0 :(得分:4)
试图逃避美元符号:
ssh host_1 "cat test_file | sed 's/\$/\\tOK/'"
答案 1 :(得分:2)
我认为你必须逃避特殊字符:
ssh host_1 "cat test_file | sed 's/\$/\\tOK/'"
答案 2 :(得分:2)
运行时
ssh host_1 "cat test_file | sed 's/$/\tOK/'"
您的本地shell首先对其参数执行参数扩展。命令为ssh
,第一个参数为host_1
,第二个参数为"cat test_file | sed 's/$/\tOK'"
。由于第二个参数是双引号,因此会尝试参数扩展。但是,$/
不是bash
中的有效参数。请注意,单引号只是双引号字符串中的文字字符;他们不保护美元符号不受参数扩展的影响。所以你需要像其他问题中指出的那样逃避美元符号。
执行命令后,远程端的shell会收到以下字符串:
cat test_file | sed 's/$/\tOK'.
双引号已消失,因为它们在本地shell删除引用时被删除。美元符号现在同样没有转义。现在,因为远程shell将sed
的第一个参数视为单引号字符串,所以不执行参数扩展,并且不需要转义美元符号。
答案 3 :(得分:0)
我终于找到了发生的事情。
我很生气,而答案对你而言并不适合我。你的答案是完全正确的。然而问题是我正在使用csh&不是ksh,每个人都以不同的方式解释命令(参数扩展)。
谢谢你们。