鱼: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"

使用不带引号的变量在 for 循环外部工作,在 for 循环内工作。

像这样在 bash 中工作

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

我已经阅读了鱼类文档的列表和循环部分。 我注意到 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

最新更新