这些是我的示例文件
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"*