相关疑难解决方法(0)

如何迭代Bash中变量定义的一系列数字?

当变量给出范围时,如何在Bash中迭代一系列数字?

我知道我可以这样做(在Bash 文档中称为"序列表达式" ):

 for i in {1..5}; do echo $i; done
Run Code Online (Sandbox Code Playgroud)

这使:

1
2
3
4
5

但是,如何用变量替换任何一个范围端点?这不起作用:

END=5
for i in {1..$END}; do echo $i; done
Run Code Online (Sandbox Code Playgroud)

哪个印刷品:

{} 1..5

syntax bash shell for-loop

1409
推荐指数
18
解决办法
102万
查看次数

bash seq替换中的变量({1..10})

有可能做这样的事情:

start=1
end=10
echo {$start..$end}
# Ouput: {1..10}
# Expected: 1 2 3 ... 10 (echo {1..10})
Run Code Online (Sandbox Code Playgroud)

bash seq

50
推荐指数
4
解决办法
8万
查看次数

序列扩展和bash中的变量

当seq数是变量时,我在Bash中遇到内置序列(即:不使用seq)的问题.例如,这工作并打印我1 2 3:

for i in {1..3};do echo $i;done
Run Code Online (Sandbox Code Playgroud)

但是这个 :

bash-3.2 $ a = 3;对于i在{1 .. $ a};做回声$ i;完成

失败并仅打印我{1..3}

这适用于ZSH,我知道我有一个替代方案来制作一个反制品,但想知道这是一个bug还是大括号扩展功能!

bash expansion

7
推荐指数
2
解决办法
3678
查看次数

使用for循环匹配具有各种扩展名的文件

我试图匹配并循环扩展.txt .h .py文件.在特定文件夹$ {arg}中.这就是我做的

for file in ${arg}/*.{txt, h, py}; do
  ...

done
Run Code Online (Sandbox Code Playgroud)

但是,即使我有这样的文件,我的所有扩展都没有这样的文件.

 line 24: dir1/*.{txt,: No such file or directory
 line 24: h,: No such file or directory
 line 24: py}: No such file or directory
Run Code Online (Sandbox Code Playgroud)

如何循环使用指定扩展名的文件for

bash

4
推荐指数
3
解决办法
4384
查看次数

如何使用大括号扩展变量

我有四个文件:

1.txt  2.txt  3.txt  4.txt
Run Code Online (Sandbox Code Playgroud)

在linux shell中,我可以使用: ls {1..4}.txt 列出所有四个文件,但是如果我设置两个变量:var1 = 1和var2 = 4,如何列出这四个文件?那是:

var1=1
var2=4
ls {$var1..$var2}.txt  # error
Run Code Online (Sandbox Code Playgroud)

什么是正确的代码?

linux bash shell brace-expansion

4
推荐指数
1
解决办法
539
查看次数

无法在bash中将大括号扩展与参数扩展相结合

$ set a b c
$ echo $1 $2 $3
a b c
$ echo ${1..3}
-bash: ${1..3}: bad substitution
Run Code Online (Sandbox Code Playgroud)

我希望通过支撑扩展来回收$ 1 $ 2 $ 3.但它不起作用.

扩展的顺序是:括号扩展,波浪扩展,参数,变量和算术扩展和命令替换(以从左到右的方式完成),单词拆分和路径名扩展.

根据bash手册,在参数扩展之前执行支撑扩展.

所以我认为bash应首先执行大括号扩展${1..3},将其转换为echo $1 $2 $3,然后执行参数扩展.

然而,事实是bash抱怨${1..3}是一个糟糕的替代品.这是为什么?

PS:谢谢你们!你们的回答都很精彩.但我想

Ignacio Vazquez-Abrams的答案更接近我想要的.

bash brace-expansion parameter-expansion

3
推荐指数
1
解决办法
210
查看次数

使用`seq`的Bash通配符模式

我正在尝试以下命令:

ls myfile.h1.{`seq -s ',' 3501 3511`}*
Run Code Online (Sandbox Code Playgroud)

ls提出错误:

ls: cannot access myfile.h1.{3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511}*: No such file or directory
Run Code Online (Sandbox Code Playgroud)

似乎ls认为整行是文件名而不是通配符模式.但是,如果我只是ls myfile.h1.{3501,3502,3503,3504,3505,3506,3507,3508,3509,3510,3511}*在终端中复制该命令,我会按预期获得列表.

为什么要在完整的工作中键入命令,而不是使用seq

bash shell

3
推荐指数
1
解决办法
121
查看次数

如何对变量进行大括号扩展?

请考虑以下脚本:

#! /bin/bash -e

echo {foo,bar}
EX={foo,bar}
echo ${EX}
Run Code Online (Sandbox Code Playgroud)

该脚本的输出是:

foo bar
{foo,bar}
Run Code Online (Sandbox Code Playgroud)

echo想要执行大括号扩展的命令${EX}.因此,我希望看到一个输出

foo bar
foo bar
Run Code Online (Sandbox Code Playgroud)

我想创建一个脚本,用户可以在其中提供带有大括号的路径,其中复制了每个扩展版本.

像这样的东西:

#! /bin/bash -e

$SOURCES=$1
$TARGET=$2

cp -r ${SOURCES} ${TARGET}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

bash shell brace-expansion

2
推荐指数
1
解决办法
566
查看次数