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"*

관련 정보