![在 shell 脚本命令中使用带有空格的变量的正确方法是什么?](https://linux22.com/image/8496/%E5%9C%A8%20shell%20%E8%84%9A%E6%9C%AC%E5%91%BD%E4%BB%A4%E4%B8%AD%E4%BD%BF%E7%94%A8%E5%B8%A6%E6%9C%89%E7%A9%BA%E6%A0%BC%E7%9A%84%E5%8F%98%E9%87%8F%E7%9A%84%E6%AD%A3%E7%A1%AE%E6%96%B9%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F%20.png)
如何包含空格作为 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"