如果您的目录名称包含空格,您肯定不希望这样做:
DIRS=`ssh $u "ls $p"`;
for DIR in $DIRS; do
由于您想保留空格而不是将它们用作分隔符,因此普遍接受的方法是告诉 bash 分隔符是换行符:
IFS=$'\n'
for DIR in `ssh $u "ls -1 $p"`; do
如果你真的必须有你的变量DIRS
,您可以使用 bash 的数组变量(这将保留您的空格):
IFS=$'\n'
DIRS=(`ssh $u "ls -1 $p"`)
unset IFS
for DIR in "${DIRS[@]}"; do
另一种通用形式是使用read
:
ssh $u "ls -1 $p" | while read DIR; do
Or:
while read DIR; do
...
done < <(ssh $u "ls -1 $p")
但是,不建议将这些作为错误处理(特别是在ssh
当您开始使用管道时,会变得更加复杂。)
到目前为止,一切都只是基本的 bash 脚本。
对于这一行,您需要用双引号将第二个参数括起来,因为其中有一个空格$DIR
将提出第三个论点:
git clone "ssh://$u$p$DIR"
我在 git 中尝试过,它似乎有效。然而,正如 @holygeek 所说,将空格替换为%20
似乎也有效,并且在某些情况下可能有益。你可以这样做:
git clone "ssh://$u$p${DIR// /%20}"