在函数内部,我会有多个回声,但我记得我可以做cat << EOF
后跟我的文本输出,然后是EOF。但是,当EOF部分没有缩进时,它似乎只能工作,就像这样
init(){
if [ conditionial ]; then
cat << EOF
this is some text
this is more text
this is even more text
EOF
但它不能像这样工作:
init(){
if [ conditionial ]; then
cat << EOF
this is some text
this is more text
this is even more text
EOF
有什么想法吗?
答案 0 :(得分:1)
&#34;这里是文件&#34;终止符必须出现在行的开头,除非重定向运算符具有-
后缀:
cat << END
this does not
END
here, but rather here
END
VS
cat <<- END
this one does end here
END
(注意空格与制表符;以及一些较旧的shell变体不支持此功能。)
除此之外,另一个有用的技巧是处理这里文档中的扩展。如果引用结尾字(我上面示例中的END
,您的EOF
),则会禁止扩展:
cat << E1
you are in a maze of twisty little directories: $PWD
E1
cat << 'E2'
you owe the Usenet Oracle $1.75 for the Tab.
E2
答案 1 :(得分:0)
在你问过之前我从来不知道这一点,但你可以使用<<-
(注意-
)忽略前导标签(不是空格)。
请参阅here
答案 2 :(得分:0)
EOF
必须在行的开头,并且它之后没有任何内容但是行尾:
#! /bin/bash
function say_hello {
cat << EOF
hello
world
EOF
}
执行:
bash test.sh
hello
world
仔细研究cat -A
:
cat -A test.sh
#! /bin/bash$
$
function say_hello {$
^Icat << EOF$
^Ihello$
^Iworld$
EOF$
}$
$
say_hello$
我的脚本问题在EOF
之后会有空格而不起作用,只有cat -A
我可以识别空间。