【发布时间】:2020-09-18 20:53:03
【问题描述】:
如果我运行脚本
#!/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
我已经阅读了 fish 文档的列表和循环部分。 我注意到 cd 有一个鱼包装。这可能是问题吗?
【问题讨论】:
-
:不正确,应删除;它将:附加到每个目录名称。不过,这似乎与您报告的错误无关。 -
数据不足。一方面,您实际上并没有向我们展示运行脚本的输出。此外,正如@chepner 指出的
for语句上的尾随冒号是错误的——这将导致每个目录都附加一个冒号。您还应该将echo $REPO_PATH替换为set --show REPO_PATH,以明确 var 包含多少个值。