出于可读性目的,是否有特定的方法来设置格式或某种换行符?
例如,我有一行代码是冗长的字符串,有很多输入参数:
PGPASSWORD=$DB_OWNER_PWD $PSQL_HOME/psql -h $HOST_NM -p $PORT -U $DBOWNER -v v1=$DBOWNER -v v2=$DUSER -f tst.sql postgres
我想在脚本中使它更具可读性:
PGPASSWORD=$DB_OWNER_PWD $PSQL_HOME/psql -h $HOST_NM
-p $PORT
-U $DBOWNER
-v v1=$DBOWNER
-v v2=$DUSER
-f tst.sql postgres
我该怎么做?
答案 0 :(得分:4)
根本不使用字符串变量来存储参数列表;使用数组。
psql_args=(
env PGPASSWORD="$DB_OWNER_PWD" # set environment variables
"$PSQL_HOME/psql"
-h "$HOST_NM" # host to connect to
-p "$PORT" # port
-U "$DBOWNER"
-v v1="$DBOWNER"
-v v2="$DUSER"
-f tst.sql # script to run
postgres # database to run it against
)
......并扩展它......
"${psql_args[@]}"
这使您可以使用带空格的参数而不会感到痛苦。另请参阅BashFAQ #50。
现在,如果您根本不将列表存储在变量中(并且您不需要内联注释),那么只需使用尾部反斜杠。
foo \
--bar \
--baz
答案 1 :(得分:2)
在每行末尾使用反斜杠:
PGPASSWORD=$DB_OWNER_PWD $PSQL_HOME/psql -h $HOST_NM \
-p $PORT \
-U $DBOWNER \
-v v1=$DBOWNER \
-v v2=$DUSER \
-f tst.sql postgres
确保在反斜杠后没有空格(空格或制表符)。
答案 2 :(得分:-1)
如果你把作业放在双引号内,它就会“正常工作”:
#!/bin/sh
FOO="one
two
three"
echo $FOO
运行时给出:
$ /tmp/var.sh
one two three
如果你真的试图运行那个命令,那么基本的想法是:
BAR=$(echo "four
five
six")
echo $BAR