如何在for循环中用变量替换Linux命令?

如何在for循环中用变量替换Linux命令?

这些是我的示例文件

user@linux:~$ ls -l | cut -d ' ' -f 10-

01. old Name.txt
02. old Name.txt
03. old Name.txt
test.txt
user@linux:~$ 

这就是我想做的。

user@linux:~$ for output in *'old Name'*; do echo $output; done
01. old Name.txt
02. old Name.txt
03. old Name.txt
user@linux:~$ 

由于实际代码多次使用old Name,所以我想将其放在变量上。

所以,在这种情况下linux命令是*'old Name'*

尝试1不起作用,所以我尝试了其他方法

user@linux:~$ cmd='old Name'
user@linux:~$ for output in $cmd; do echo $output; done
old
Name
user@linux:~$ 

尝试2

cmd="*'old Name'*""
for output in $cmd; do echo $output; done

然而,它不起作用

user@linux:~$ cmd="*'old Name'*""
> for output in $cmd; do echo $output; done
> 
> 

尝试3

cmd='old Name'
for output in ${*'cmd'*}; do echo $output; done

也不起作用

cmd='old Name'
user@linux:~$ for output in ${*'cmd'*}; do echo $output; done
bash: ${*'cmd'*}: bad substitution
user@linux:~$ 

如果您需要更多信息,请告诉我。

答案1

你有循环

for filename in *'old Name'*; do
    echo "$filename"
done

并且您想要更改模式*'old Name'*以便将字符串old Name保存在变量中。

这可以通过以下方式完成

name='old Name'

for filename in *"$name"*; do
    echo "$filename"
done

要不就

printf '%s\n' *"$name"*

为了使模式正常工作,模式中包含文件名通配符的部分必须保持不带引号。因此,如果我们引用 ,这些*字符就不能成为变量值的一部分。如果是,它们将被用作文字字符,而不是通配符。name$name*

同时,我们不想使用name变量未引用的,因为这会将其在空间上分成两个单词,最终会得到两个单独的图案。

这就是为什么设置name字符串并在循环中old Name使用(如上所示)可能是最好的解决方案。*"$name"*

相关内容