В рыбной оболочке, как перебирать файлы, используя подстановочные знаки и переменные?
Если я бегу:
for f in *1000.png
echo $f
end
я получил
1000.png
11000.png
21000.png
Я хотел бы сделать что-то вроде:
for i in 1 2 3
for f in *$i000.png
echo $f
end
end
Получить
1000.png
11000.png
21000.png
2000.png
12000.png
22000.png
3000.png
13000.png
23000.png
Вместо этого он ничего не выводит.
Я также попробовал:
for i in 1 2
set name "*"$i"000.png"
for f in (ls $name)
echo $f
end
end
Выведение:
ls: *1000.png: No such file or directory
ls: *2000.png: No such file or directory
2 ответа
Решение
Когда вы пытаетесь сослаться на i
переменная в *$i000.png
ваша оболочка думает что $i000
означает, что вы пытаетесь сослаться на i000
переменная, не i
следуют три ноля, как вы хотите.
использование {$var_name}
чтобы получить доступ к переменным в fish, обычно хорошая идея всегда ссылаться на переменные оболочки таким образом.
Так что ваш случай, во второй строке используйте:
for f in *{$i}000.png
Чтобы не пытаться расширить переменную $i000
вы бы сделали
for i in 1 2 3
for f in *{$i}000.png
echo $f
end
end
Или вообще избегайте внешнего цикла:
for f in *{1,2,3}000.png