첫 번째 방법은 다른 사람이 그렇게 쉽게 일반적이다 알다.
환경 변수가 사용되는 경우 ($ ORACLE_HOME, $ JAVA, ..) 명령 줄에는 설정되지 않지만 다른 스크립트에 의해 사용되기 전에 사용됩니다. 따라서 var가 환경 변수의 일부가되어야한다고 생각하면 환경 변수 (기본값)를 사용하는 것이 좋습니다.
다른 경우에는 매개 변수를 사용합니다.
어떻게 스크립트 modifing에 대한 :
이
# First script calling myprogram that uses ...
# Difficult to see, the vars name and lastname
name="John"
while read -r lastname; do
./myprogram
done < lastnames.txt
이제 다른 사람이 데이터베이스에서 환경 변수 이름으로 모든 사용자를 루프를 변경하고 싶어합니다.
name="John"
while read -r lastname; do
./myprogram
username="${lastname}" ~/bin/getdbusers
done < lastnames.txt
당신이 운이 이번에는 두 번째 사람은 또한 VAR username
를 사용하고 ./myprogram
이 lastname
를 사용한다는 사실을 인식하지 못합니다. 그는 루프 변수를 변경하여 버그를 도입하려는 유혹을 받고 있습니다. 어떤 프로그램이 $ name 및 다른 변수를 사용하는지 이해하기가 어려워졌습니다.
사용하여 매개 변수를 쉽게 이해할 수 있도록하고 버그를 멀리 유지하지 :
name="John"
while read -r lastname; do
./myprogram "${name}" "${lastname}"
~/bin/getdbusers "${lastname}"
~/bin/somethingWithUserName "${lastname}"
done < lastnames.txt
문제 없음, 정말. 두 개는 서로 바꿔 쓸 수 없습니다. 당신의 스크립트는 그 중 하나를 받아들이도록 정확하게 쓰여 져야합니다. 명령 행 옵션과 비교되는 환경 변수의 유일한 단점은 쉘에서 환경 변수를 설정하고 잊어 버릴 수 있다는 것입니다. 프로그램이 어떻게 설정되었는지 알지 못하거나 신경 쓰지 않을 것이고,'./myprogram'이 뜻밖에 'arg1 = 1./myprogram'과 똑같이 동작 할 때 머리를 찰 수 있습니다. 실수로 호출에 명령 행 옵션을 추가하는 것이 더 어렵습니다. – chepner