如果我运行脚本
#!/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