如何将 shell 变量连接到命令行中的其他参数?

如何将 shell 变量连接到命令行中的其他参数?

如何将 shell 变量连接到命令行中的其他参数?

例如,

#!/bin/sh
WEBSITE="danydiop" 
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > $WEBSITE.sql

我需要连接.sql$WEBSITE

答案1

用于${ }封装变量。

没有大括号:

VAR="foo"
echo $VAR
echo $VARbar

会给

foo

什么也没有,因为变量$VARbar不存在。

带大括号:

VAR="foo"
echo ${VAR}
echo ${VAR}bar

会给

foo
foobar

附上第一个$VAR并不是必要的,但却是一个很好的做法。

对于你的例子:

#!/bin/sh
WEBSITE="danydiop" 
/usr/bin/mysqldump --opt -u root --ppassword ${WEBSITE} > ${WEBSITE}.sql

这适用于bash,,,也许其他人也适用zshksh

答案2

只需将变量内容连接到您想要连接的任何其他内容,例如

/usr/bin/mysqldump --opt -u root --ppassword "$WEBSITE" > "$WEBSITE.sql"

双引号与连接无关:这里>$WEBSITE.sql也可以。当变量的值可能包含一些 shell 特殊字符(空格和\[?*)时,在变量扩展周围需要它们。我强烈建议在所有变量扩展和命令替换周围加上双引号,即始终写"$WEBSITE"and "$(mycommand)"

有关更多详细信息,请参阅$VAR 与 ${VAR} 以及引用或不引用

答案3

我通常使用引号,例如echo "$WEBSITE.sql"

所以你可以这样写:

#!/bin/sh
WEBSITE="danydiop" 
/usr/bin/mysqldump --opt -u root --ppassword $WEBSITE > "$WEBSITE.sql"

相关内容