我尝试从git用户获取所有repos并将它们放入shell脚本中的数组中。不知何故,数组不会将新行识别为分隔符,并且在数组中只有一个多行元素。
这是我的示例代码:
someUser=Joe
declare -a repos=$(curl -s "https://api.github.com/users/$someUser/repos?page=$PAGE&per_page=100" | grep -e 'git_url*' | cut -d \" -f 4 | cut -d"/" -f5 | cut -d"." -f1)
for repo in $repos; do
echo $repo
// some more stuff
done
卷曲和剪裁的输出看起来像是:
RepoA
RepoB
RepoC
[...]
如何将新的线元素视为数组中的新元素?我多次使用该数组,因此我需要一个带有所有存储库的固定容器。
答案 0 :(得分:2)
这是迭代Bash数组元素的正确方法:
for repo in "${repos[@]}"; do
另外,要创建一个带有命令输出的数组,您需要将$(...)
子shell包装在(...)
中,如下所示:
declare -a repos=($(curl -s ...))
答案 1 :(得分:0)
感谢@janos我修复了脚本。 delcare系列中的附加支架是问题所在。这是完整的代码。也许有人想复制它。
#!/bin/bash
gitUrl="https://github.com"
gitUser="foobar"
cloneCmd="git clone"
fetchCmd="git fetch"
magenta="\033[35m"
green="\033[32m"
def="\033[0m"
declare -a repos=($(curl -s "https://api.github.com/users/$gitUser/repos?page=$PAGE&per_page=100" | grep -e 'git_url*' | cut -d \" -f 4 | cut -d"/" -f5 | cut -d"." -f1))
# Init clone
echo -e "$magenta Cloning new Repositories $def"
for repo in "${repos[@]}"
do
if [ -d $repo ]; then
echo -e "$green \tRepo $repo already exists $def"
continue
fi
$cloneCmd $gitUrl/$gitUser/$repo
done
echo -e "$green Colning finished $def"
# Update Repos
echo -e "$magenta Updating Repositories $def"
for repo in "${repos[@]}"
do
cd $repo
$fetchCmd
cd ..
done
echo -e "$green Update finished $def"