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