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変数を使用したくありません。引用しない、これは空間的に2つの単語に分割され、2つの別々のパターンが生成されます。

そのため、name文字列を設定してループで使用するのがold Nameおそらく最善の解決策でしょう。*"$name"*

おすすめ記事