Portál AbcLinuxu, 2. listopadu 2025 17:25
select, ktera mi funguje, avsak pokud chci mit "vnorena" menu pod jednotlivymi volbami, skript se nespusti kvuli chybe parsovani a predpokladam, ze delam neco blbe, resp. ze mam konstrukci blbe zapsanou. Nicmene nemuzu ani za boha prijit na to proc. Potrebuji docilit toho aby napriklad pod volbou cislo 2, bylo dalsi menu s nekolika dalsimi polozkami.
Skript konci s nasledujici chybou:
./menutest.sh: line 14: syntax error near unexpected token `opts'
./menutest.sh: line 14: ` select opts in "${sub[@]}"'
Pokud me nekdo dokazete navest co je spatne, moc mi tim pomuzete
Konstrukce skriptu je neco takoveho (vzor jsem prevzal z clanku, kde jsem hledal informace):
#!/bin/bash
PS3="Vyberte cislo: "
items=("Item 1" "Item 2" "Item 3")
sub=("TEST 1" "TEST 2" "TEST 3")
while true; do
select item in "${items[@]}" Quit
do
case $REPLY in
1) echo "Vybrano cislo #$REPLY odpovidajici volbe $item"; break;;
2) echo "Vybrano cislo #$REPLY odpovidajici volbe $item"; break;;
select opts in "${sub[@]}"
do
case $REPLY in
1) echo "TEST OK"; break;;
esac
done
3) echo "Vybrano cislo #$REPLY odpovidajici volbe $item"; break;;
$((${#items[@]}+1))) echo "Konec!"; break 2;;
*) echo "Neznama volba $REPLY"; break;
esac
done
done
Řešení dotazu:
#!/bin/bash
PS3="Vyberte cislo: "
items=("Item 1" "Item 2" "Item 3")
sub=("TEST 1" "TEST 2" "TEST 3")
while true; do
select item in "${items[@]}" Quit
do
case $REPLY in
1) echo "Vybrano cislo #$REPLY odpovidajici volbe $item"; break;;
2) echo "Vybrano cislo #$REPLY odpovidajici volbe $item";
select opts in "${sub[@]}"
do
case $REPLY in
1) echo "TEST OK"; break;;
esac
done
break;;
3) echo "Vybrano cislo #$REPLY odpovidajici volbe $item"; break;;
$((${#items[@]}+1))) echo "Konec!"; break 2;;
*) echo "Neznama volba $REPLY"; break;
esac
done
done
shellcheck vyhazoval chybu na radku 13, ale asi jsem u toho sedel dlouho a nemohl prijit na to co tam mam spatne. Nyni to funguje.
echo "Item 1\nItem 2\nItem 3" | fzf
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.