これは私のサンプルファイルです。
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
変数を使用したくありません。引用しない、これは空間的に2つの単語に分割され、2つの別々のパターンが生成されます。
そのため、name
文字列を設定してループで使用するのがold Name
おそらく最善の解決策でしょう。*"$name"*