Chciałbym użyć getopts
wewnątrz funkcji, którą zdefiniowałem w moim .bash_profile. Chodzi o to, że chciałbym przekazać niektóre flagi do tej funkcji, aby zmienić jej zachowanie.Używanie getopts wewnątrz funkcji Bash
Oto kod:
function t() {
echo $*
getopts "a:" OPTION
echo $OPTION
echo $OPTARG
}
Gdy przywołuję to tak:
t -a bc
uzyskać ten wynik:
-a bc
?
Co się stało? Chciałbym uzyskać wartość bc
bez ręcznego przesuwania i parsowania. Jak prawidłowo używać funkcji getopts
w funkcji?
EDIT: poprawione mój fragment kodu, aby spróbować $ OPTARG, bezskutecznie
EDIT # 2: OK, okazuje się, że kod jest w porządku, moja skorupa została w jakiś sposób zawiedli. Otwarcie nowego okna rozwiązało to. Wartość arg była rzeczywiście w $ OPTARG.
Chciałbym przegłosować tę odpowiedź sto razy, gdybym mógł. To doprowadzało mnie do szału !! –
1.) '1' w' 1> i 2' nie jest konieczne. 2.) Brakowało ci zdefiniowania "a", "o" i "OPTARG" jako lokalnych. 3.) 'exit' nie wyjdzie ze skryptu, ale tylko pod-powłokę. Aby wyjść ze skryptu, konieczne jest ustawienie 'set -e' w powłoce zewnętrznej i 'exit 1' w pod-powłoce. Przykład nie uruchamia problemu, ale zrobi to 'MSG = $ (foo ...)'. – ceving
@cending 1) Jest to kwestia stylu kodowania, ale nie, nie jest to konieczne zgodnie z definicją języka. 2) Uzgodnione, powinny być lokalne. 3) Jak powiedziałeś, wyjście * spowoduje * wyjście ze skryptu w moim przykładzie. Oczywiście 'exit' nie spowoduje wypuszczenia powłoki dodatkowej, ale nie jest to konkretny problem z tym pytaniem. Nie musisz używać 'set -e', musisz tylko upewnić się, że złapałeś błąd i' MSG = $ (foo ...) || die' działa równie dobrze. 'set -e' to jedno rozwiązanie problemu [ale nie jest to idiotoodporne] (http://mywiki.wooledge.org/BashFAQ/105), a ja, jak wielu innych, nie polecam korzystania z niego. –