Bash命令作为变量在加入以形成单个命令时失败

All*_*mas 1 bash

ssh="ssh user@host"
dumpstructure="mysqldump --compress --default-character-set=utf8 --no-data --quick -u user -p database"
mysql=$ssh "$dumpstructure"
$mysql | gzip -c9 | cat > db_structure.sql.gz
Run Code Online (Sandbox Code Playgroud)

这在第三行失败了:

mysqldump --compress --default-character-set = utf8 --no-data --quick -u user -p database:command not found

为了调试这个特定的错误,我简化了我的实际脚本.$ssh并且$dumpstructure并不总是在真实的脚本中连接在一起.

che*_*ner 5

变量用于保存数据,而不是命令.使用功能.

mysql () {
    ssh user@host mysqldump --compress --default-character-set=utf8 --nodata --quick -u user -p database
}

mysql | gzip -c9 > db_structure.sql.gz
Run Code Online (Sandbox Code Playgroud)

命令的参数可以存储在数组中.

# Although mysqldump is the name of a command, it is used here as an
# argument to ssh, indicating the command to run on a remote host
args=(mysqldump --compress --default-character-set=utf8 --nodata --quick -u user -p database)
ssh user@host "${args[@]}" | gzip -c9 > db_structure.sql.gz
Run Code Online (Sandbox Code Playgroud)