我在shell脚本中有以下代码.这似乎只当它工作不是在一个函数定义.有问题的行是包含"<<"的行.错误消息是
"./run:第210行:语法错误:意外的文件结束"
如何在函数中正确写入?
init_database()
{
cd ../cfg
db.sh << ENDC
$DB_ADMIN
0
y
n
ENDC
check_status
sqlplus $DB_SCHEMA@$DB_NAME < initial_data.sql
cd -
}
Run Code Online (Sandbox Code Playgroud)
有很多方法可以解决这个问题.
1/Unindent这里的文档结束标记,例如:
cat <<EOF
hello
$PWD
EOF
Run Code Online (Sandbox Code Playgroud)
但这会让你的代码看起来很难看.
2 /"缩进"这里的文档开始标记:
cat <<' EOF'
hello
$PWD
EOF
Run Code Online (Sandbox Code Playgroud)
第一个EOF之前的那个位与第二个之前的位完全相同(制表符,四个空格,两个制表符,等等).这允许你保持良好的缩进,虽然它不会扩展here-document中的变量($PWD 不会改变).
3 /允许从输入行和结束标记的开头剥离制表符.
cat <<-EOF
hello
$PWD
EOF
Run Code Online (Sandbox Code Playgroud)
但是没有办法看到线条的开头.
4 /为了您的目的,您还可以使用:
( echo "$DB_ADMIN";
echo "" ;
echo "0" ;
echo "y" ;
echo "n"
) | db.sh
check_status
sqlplus $DB_SCHEMA@$DB_NAME < initial_data.sql
cd -
Run Code Online (Sandbox Code Playgroud)
我相信4号对你来说是最好的选择.它允许在行中的任何位置和变量扩展中很好地排列输入,制表符和空格.
| 归档时间: |
|
| 查看次数: |
867 次 |
| 最近记录: |