解决问题的最佳方法是使用数组:
PSQL=( psql -a -e -d users -U postgres --no-align $'-F\t' -c )
FILENAME="file.ext"
QUERY="select * from users limit 1;"
"${PSQL[@]}" "${QUERY}" # > ${FILENAME}
解释。第一行定义了一个名为 PSQL 的新数组。你可以把它想象成:
PSQL[0] = psql
PSQL[1] = -a
PSQL[2] = -e
PSQL[3] = -d
PSQL[4] = users
PSQL[5] = -U
PSQL[6] = postgres
PSQL[7] = --no-align
PSQL[8] = -F<tab>
PSQL[9] = -c
在最后一行中,(双引号)术语"${PSQL[@]}"
将扩展为构成数组的 10 个“单词”,PSQL
而(双引号)术语"${QUERY}"
将扩展为被select * from users limit 1;
视为单个单词的字符串。为了让事情更清楚,我将向您展示扩展如何使用{
并将}
bash 在扩展行时看到的每个参数进行分组"${PSQL[@]}" "${QUERY}"
:
{ psql } { -a } { -e } { -d } { users } { -U } { postgres } { --no-align } { -F<tab> } { -c } { select * from users limit 1; }
评论。使用所有大写的变量名bash
被认为是不好的做法。