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

For loop Fish:for循环:cd命令的参数太多,for-loop,fish,cd,For Loop,Fish,Cd,如果我运行脚本 #!/usr/bin/fish cd /home/user/repos/repo1 pwd 按预期工作(更改目录并打印该路径) 当我将相同的逻辑放入for循环时,cd抱怨参数太多,即使没有空格和空格 #/usr/垃圾箱/鱼 设置REPOS“/home/user/REPOS/repo1”“/home/user/REPOS/repo1” 对于以$REPOS为单位的REPO_路径: echo$REPO_路径 cd$REPO_路径 pwd 结束 使用相对路径没有帮助 设置REPOS“

如果我运行脚本

#!/usr/bin/fish
cd /home/user/repos/repo1
pwd
按预期工作(更改目录并打印该路径)

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

#/usr/垃圾箱/鱼
设置REPOS“/home/user/REPOS/repo1”“/home/user/REPOS/repo1”
对于以$REPOS为单位的REPO_路径:
echo$REPO_路径
cd$REPO_路径
pwd
结束
使用相对路径没有帮助

设置REPOS“~/REPOS/repo1”“~/REPOS/repo1”
使用不带引号的变量在for循环外部工作,在for循环内部也一样

像这样在bash中工作

#/bin/bash
repos=(“/home/user/repos/repo1”“/home/user/repos/repo1”)
对于“${repos[@]}”中的路径
做
cd$路径
pwd
完成
我已经阅读了fish文档的列表和循环部分。 我注意到cd有一个鱼包装。这可能是问题所在吗

取下结肠

显示错误“参数太多”的原因是调用变量“…PATH”会导致fish将其解释为PATH变量,这意味着它将在“:”上拆分(如$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
取下结肠

显示错误“参数太多”的原因是调用变量“…PATH”会导致fish将其解释为PATH变量,这意味着它将在“:”上拆分(如$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

不正确,应删除;它在每个目录名后面附加一个
。不过,这似乎与您报告的错误无关。数据不足。首先,您没有实际向我们显示运行脚本的输出。另外,@chepner指出,
for
语句的尾随冒号是错误的——它将导致每个目录都附加一个冒号。您还应将
echo$REPO_路径
替换为
set--show REPO_路径
,以明确var的值数量。
不正确,应删除;它在每个目录名后面附加一个
。不过,这似乎与您报告的错误无关。数据不足。首先,您没有实际向我们显示运行脚本的输出。另外,@chepner指出,
for
语句的尾随冒号是错误的——它将导致每个目录都附加一个冒号。您还应该将
echo$REPO_路径
替换为
set--show REPO_PATH
,以明确var中有多少值。但是为什么
echo$REPO_路径
不能同时打印这两个值呢?我只能看到repo变量,不能看到冒号。哦,我之所以看到是因为它是空的
$repo_PATH:set在局部范围内,未报告,有两个元素$repo_PATH[1]:length=38 value=|/home/user/repos/repo1 |$repo_PATH[2]:length=0 value=| |$REPO_PATH:未在全局范围内设置$REPO_PATH:未在通用范围内设置cd命令的参数过多
,但为什么
echo$REPO_PATH
不同时打印这两个参数?我只能看到repo变量,不能看到冒号。哦,我之所以看到是因为它是空的
$repo_路径:在局部范围内设置,未报告,有2个元素$repo_路径[1]:length=38 value=|/home/user/repos/repo1 |$repo_路径[2]:length=0 value=|$repo_路径:未在全局范围内设置$repo_路径:未在通用范围内设置cd命令的参数太多