(bash)用猫缩进多行文字到$ VAR?

操作系统: Debian 7 Wheezy GNU \ Linux
语言: Bash
已经审查过的文件: wiki / heredoc

什么工作:

cat > software.temp <<- EOF gparted baobab EOF 

什么不是

 prefer="/etc/apt/preferences.d/${reponame}" cat <<- EOF >> ${prefer} Package: * Pin: release l=Debian Pin-Priority: 110 EOF 

是的,我知道这是相反的,这可能是我没有得到它的工作。 从本质上来说,“找不到EOF”的错误。 请注意, 上面的每个块都用TAB 缩进一次或多次。 你可以在这里看到我的代码。 我不知道是否是因为我如何直接input/输出。

我可能以为像下面这样的东西,但也没有工作。

 cat <<- EOF Package: * Pin: release l=Debian Pin-Priority: 110 EOF >> ${prefer} 

简短的回答使用cat -A ,并确保EOF和行尾之间没有空格。


here-doc两件事here-doc

  1. 确保在你选择的字符串之后直线结束,通常是EOF但可以是任何东西。

  2. -cat <<-EOF允许缩进,所以行可以开始与选项卡和这些选项卡将不会被打印。

例子:

 tiago@dell:/tmp$ cat test1.sh #!/bin/bash cat << EOF Hello here-doc EOF tiago@dell:/tmp$ cat test2.sh #!/bin/bash cat << EOF Hello here-doc EOF tiago@dell:/tmp$ bash test1.sh Hello here-doc tiago@dell:/tmp$ bash test2.sh test2.sh: line 4: warning: here-document at line 2 delimited by end-of-file (wanted `EOF') Hello here-doc EOF 

这两个文件看起来是一样的,但是在test2.sh文件编辑器中没有注意到EOF之后有一个空格,但是可以使用cat -A

 tiago@dell:/tmp$ cat -A test1.sh #!/bin/bash$ cat << EOF$ Hello here-doc$ EOF$ tiago@dell:/tmp$ cat -A test2.sh #!/bin/bash$ cat << EOF$ Hello here-doc$ EOF $ 

现在WRT缩进:

 tiago@dell:/tmp$ cat test3.sh #!/bin/bash cat << EOF Hello here-doc EOF cat <<-EOF Hello here-doc (Indentation ignored) EOF tiago@dell:/tmp$ bash test3.sh Hello here-doc Hello here-doc (Indentation ignored)