Fish:for 循环:cd 命令的参数太多

Fish: for loop: Too many args for cd command

如果我运行一个脚本

#!/usr/bin/fish
cd /home/user/repos/repo1
pwd

按预期工作(更改目录并打印该路径)。

当我将相同的逻辑放入 for 循环时,cd 抱怨参数太多,即使没有 space 和 .

#! /usr/bin/fish

set REPOS "/home/user/repos/repo1" "/home/user/repos/repo1"

for REPO_PATH in $REPOS:
    echo $REPO_PATH
    cd $REPO_PATH
    pwd
end

使用相对路径没有帮助,

set REPOS "~/repos/repo1" "~/repos/repo1"

使用不带引号的变量在 for 循环外工作,在 for 循环内同样抱怨。

像这样在 bash 工作

#!/bin/bash
repos=("/home/user/repos/repo1" "/home/user/repos/repo1")
for path in "${repos[@]}"
do
    cd $path
    pwd
done

我已阅读 fish 文档的列表和循环部分。 我注意到 cd 有一个鱼包装纸。这可能是问题所在吗?

去掉冒号。

显示错误的原因 "Too many arguments" 是调用变量“...PATH”导致 fish 将其解释为路径变量,这意味着它将在“:”上拆分(如$PATH, $LD_LIBRARY_PATH 等).

所以 fish 将 $REPO_PATH 设置为“/home/user/repos/repo1:”,然后在“:”上拆分它,使其成为“/home/user/repos/repo1”和“”的列表.

然后将其作为两个参数传递给 cd,一个为空,cd 抱怨有第二个虚假参数。

所以只需使用

set REPOS "/home/user/repos/repo1" "/home/user/repos/repo1"

for REPO_PATH in $REPOS
    echo $REPO_PATH
    cd $REPO_PATH
    pwd
end