Fish:for 循环:cd 命令的参数太多
Fish: for loop: Too many args for cd command
如果我运行一个脚本
#!/usr/bin/fish
cd /home/user/repos/repo1
pwd
按预期工作(更改目录并打印该路径)。
当我将相同的逻辑放入 for 循环时,cd
抱怨参数太多,即使没有 space 和 .
#! /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 有一个鱼包装纸。这可能是问题所在吗?
去掉冒号。
显示错误的原因 "Too many arguments" 是调用变量“...PATH”导致 fish 将其解释为路径变量,这意味着它将在“:”上拆分(如$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
如果我运行一个脚本
#!/usr/bin/fish
cd /home/user/repos/repo1
pwd
按预期工作(更改目录并打印该路径)。
当我将相同的逻辑放入 for 循环时,cd
抱怨参数太多,即使没有 space 和 .
#! /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 有一个鱼包装纸。这可能是问题所在吗?
去掉冒号。
显示错误的原因 "Too many arguments" 是调用变量“...PATH”导致 fish 将其解释为路径变量,这意味着它将在“:”上拆分(如$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