具有转义字符的Linux命令

时间:2013-02-10 13:49:44

标签: linux shell sed command

当我尝试执行这样的命令时:

  
    

ssh host_1“cat test_file | sed's / $ / \ tOK /'”

  

我收到了这个错误:

  
    

非法变量名称。

  

有什么问题?

4 个答案:

答案 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,每个人都以不同的方式解释命令(参数扩展)。

谢谢你们。