|在一行的开头 - bash

时间:2011-11-13 00:11:26

标签: linux bash

|在一行的开头是什么意思?

tr -d '?."!:,();' < manywords \

| tr 'A-Z' 'a-z' \

| tr ' ' '\n'

我正在使用的资源说这应该可行但是当我运行它时,我得到syntax error near unexpected token |'`

3 个答案:

答案 0 :(得分:6)

这是一个pipe。反斜杠是一个行继续符。

问题可能是由于空白行。试试这个:

tr -d '?."!:,();' < manywords \
| tr 'A-Z' 'a-z' \
| tr ' ' '\n'

或者你可以把它全部写在一行:

tr -d '?."!:,();' < manywords | tr 'A-Z' 'a-z' | tr ' ' '\n'

答案 1 :(得分:5)

语法错误是由空行引起的。

tr -d '?."!:,();' < manywords \
| tr 'A-Z' 'a-z' \
| tr ' ' '\n'

应该有效。 \表示“此命令在下一行继续”,所以这只是

tr -d '?."!:,();' < manywords | tr 'A-Z' 'a-z' | tr ' ' '\n'

除了更具可读性。

答案 2 :(得分:1)

不应该有一条线的开头。前一行末尾的\表示在处理过程中应忽略以下换行符 - 来自bash manual

  

非引用的反斜杠()是转义字符。它保留了   后面的下一个字符的文字值,但有例外   的。如果出现\对,并且反斜杠本身不引用,则将\视为行继续   (也就是说          从输入流中删除并有效忽略)

您的命令应该在功能上等同于

tr -d '?."!:,();' < manywords | tr 'A-Z' 'a-z' | tr ' ' '\n'

但您似乎添加了额外的换行符。