루프 내에서 확장 변수를 컬링할 수 없는데 에코는 왜 할 수 있나요?

루프 내에서 확장 변수를 컬링할 수 없는데 에코는 왜 할 수 있나요?

컬에 변수를 포함해야 합니다

for fname in "assets/*.drx"; do
    echo $fname
    curl -F file=@"$fname" "http://someurl.com/"    
    echo $fnamename
done

결과:

assets/5baa5caa414f1d7786e86d03_1545903119.11.drx
curl: (26) couldn't open file "assets/*.drx"
assets/5baa5caa414f1d7786e86d03_1545903119.11.drx

컬은 glob 표현식을 사용하는 것처럼 보이지만 echo는 실제 파일 이름을 사용합니다. 컬은 왜 이렇게 행동합니까? echo가 실제 변수를 보는 이유와 컬에서 파일 이름을 사용하는 방법은 무엇입니까?

답변1

와일드카드를 인용하여 *쉘이 확장되지 않도록 했습니다.

for fname in assets/*.drx; do
    printf '%s\n' "$fname"
    curl -F file=@"$fname" "http://someurl.com/"    
done

변수 fname에 값이 할당됩니다.단어텍스트 assets/*.drx. 당신이 그것을 사용할 때인용되지 않음에서는 echo쉘이 이를 충실하게 확장합니다.

관련 정보