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

如果我运行脚本

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

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

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

#! /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"

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

像这样在bash中工作

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

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

iCMS 回答:Fish:for循环:cd命令的参数过多

去除结肠。

显示错误“参数过多”的原因是,调用变量“ ... PATH”会导致Fish将其解释为路径变量,这意味着它将在“:”上拆分(例如$ PATH) ,$ LD_LIBRARY_PATH等)。

鱼就这样走了,将$ 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
本文链接:https://www.f2er.com/2233900.html

大家都在问