web-dev-qa-db-ja.com

コマンドラインでシェル変数を他のパラメーターに連結するにはどうすればよいですか?

コマンドラインでシェル変数を他のパラメーターに連結するにはどうすればよいですか?

例えば、

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

連結する必要があります.sqlから$WEBSITE

16
aneuryzm

${ }を使用して変数を囲みます。

中括弧なし:

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

これはbashzshkshで機能します。

26
wag

変数の内容を他の連結したいものに連結するだけです。

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

二重引用符は連結とは無関係です。ここで_>$WEBSITE.sql_も機能します。変数の値にシェルの特殊文字(空白文字と_\[?*_)が含まれている可能性がある場合、変数の展開の前後で必要です。すべての変数展開とコマンド置換を二重引用符で囲むことを強くお勧めします。つまり、常に_"$WEBSITE"_および"$(mycommand)"と記述します。

詳細については、「 $ VARと$ {VAR}、および引用するかしないか 」を参照してください。

私は通常、引用符を使用します。 echo "$WEBSITE.sql"

だからあなたはそれを次のように書くことができます:

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