Bash 스크립트: 흐름 제어를 위해 확장하기 위해 변수의 와일드카드를 활성화하는 방법은 무엇입니까?

Bash 스크립트: 흐름 제어를 위해 확장하기 위해 변수의 와일드카드를 활성화하는 방법은 무엇입니까?

for나는 다음과 같은 샘플 스크립트를 참조하여 흐름 제어를 연습했습니다 .

if [ $(id -u) = "0" ]; then
        dir_list="/home/*"
    else
        dir_list=$HOME
    fi
    for home_dir in $dir_list; do

위 내용은 "Flow Control - Part 3"에서 부분적으로 인용된 내용입니다.http://linuxcommand.org/lc3_wss0130.php

그런 다음 변수의 와일드카드가 for흐름 제어에서 어떻게 작동하는지 확인하기 위해 아래 줄을 시도했습니다.

#!/bin/bash

binlist="~/bin/*"
   
for i in $binlist; do
echo $i
done

와일드카드를 확장하고 모든 파일을 ~/bin/출력으로 표시하고 싶었지만 그런 일이 발생하지 않았습니다. 출력은 단지 ~/bin/*.

변수를 사용하지 않고 ~/bin/*목록에 직접 할당하면 for예상한 대로 의 모든 파일이 ~/bin/표시됩니다.

질문=====

변수의 와일드카드를 확장하려면 어떻게 해야 합니까?

아니면 참고 사이트의 샘플 코드가 무엇을 의도하는지 오해하고 있는 걸까요?

=============

제 질문을 읽어주셔서 감사합니다!

답변1

.NET 대신 홈 디렉토리에 bash 변수를 사용할 수 있습니다 ~.

홈 디렉터리의 bash 변수는 $HOME스크립트가 다음과 같아야 합니다.

#!/bin/bash

binlist="$HOME/bin/*"
   
for i in $binlist; do
echo $i
done

/home/$USER또는 다음과 같이 대신 사용할 수도 있습니다 $HOME.

#!/bin/bash

binlist="/home/$USER/bin/*"
   
for i in $binlist; do
echo $i
done

다음 명령을 실행하여 이러한 변수를 각각 볼 수 있습니다.

echo $HOME
echo $USER

이는 bash 맨페이지의 "Shell Variables" 아래에 나열되어 있습니다.


또한,@John1024가 언급한 대로, 물결표 $HOME는 따옴표 안에 있으면 확장되지 않으므로 세 번째 옵션은 다음을 사용하는 것입니다.

#!/bin/bash

binlist=~/"bin/*"
   
for i in $binlist; do
echo $i
done

그리고@bac0n이 언급한 대로여기서는 따옴표가 필요하지 않으므로 다음을 사용할 수도 있습니다.

#!/bin/bash

binlist=~/bin/*
   
for i in $binlist; do
echo $i
done

관련 정보