如何将 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
,,,也许其他人也适用zsh
。ksh
答案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"