シェルスクリプトコマンドでスペースを含む変数を使用する正しい方法は何ですか? [コピー]

シェルスクリプトコマンドでスペースを含む変数を使用する正しい方法は何ですか? [コピー]

RHEL bashスクリプトのsvnコマンドで使用される変数の一部としてスペースを含める方法は?または下記の内容に問題がある場合はお知らせください。

SVN URL変数には空白がなく、次の部分が有効です。

svn checkout $svnUrl $checkoutDir --username $username --password $password --non-interactive --depth immediates --no-auth-cache

ただし、ハードコーディング時に機能するSVNアップデートコマンドは変数として機能しません。

updateSubProject="&& svn update --set-depth infinity --no-auth-cache --username $username --password $password --non-interactive"
cd project-dir $updateSubProject
cd ../another-project $updateSubProject

答え1

より良いアプローチは、これを行う関数を作成することです。

updateSubProject() {
    pushd "$1"
    svn checkout "$svnUrl" "$checkoutDir" --username "$username" --password "$password" --non-interactive --depth immediates --no-auth-cache
    popd
}

updateSubProject project-dir
updateSubProject path/to/another-project

これにより、コードを変数に保存しようとせずに多くの単語分離の問題を回避できます。

答え2

変数に格納されているコマンドを実行しようとしている可能性があるため、
eval "$updateSubProject"
変数から二重&を削除して次のように実行します。
cd project-dir && eval "$updateSubProject"

関連情報