이것은 내 샘플 파일입니다.
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"*