A deklarált változók láthatósága olyan, mint Java-ban. A nem deklarált (statikus típus nélküli) változók láthatóságát nem módosítják a blokkok {}.
Ugyanez igaz a for ciklusokra is:
Deklarált változóknál a következő módosítószavak használhatóak:
Azonban a final kivételével az összeset figyelmen kívül hagyja a BeanShell. Nem deklarált változóknál nem használható semmilyen módosítószó.
JavaBean-ek attribútumait kényelmesebben is elérhetjük, módosíthatjuk, mint a getter-setter metódusokkal:
Probléma lehet, ha a fenti objektumnak van label nevű adattagja, mert ilyenkor azt módosítjuk közvetlenül és nem a getter-setter metódusok hívódnak. Erre ad megoldást {””} szelektor.
Ha a Java futtatókörnyezetben rendelkezésre áll a gyűjtemény-keretrendszer, akkor a Hashtable és Map objektumok put és get metódusai helyett is használhatjuk:
A Java 1.5-ben megjelent for ciklus a BeanShell-ben is megtalálható akkor is, ha nem 1.5-ösnél korábbi virtuális gépen futtatjuk.
Az alábbi típusokra használhatjuk:
A Java 1.5-ben bevezetett StringBuilder-re nem működik.
BeanShell-ben a switch-et objektumra is használhatjuk, ilyenkor az equals() metódussal hasonlítja a case-ágak feltételeit (amik szintén objektumok) az objektumhoz.
A case ágakat (és a default ágat) sorra vizsgálja a kiértékelő eljárás, ezért a default ág után írt case ág sosem futhat le. Ez azonban nem vezet fordítási hibához, mivel a BeanShell a Java-val ellentétben nem vizsgálja, hogy elérhető-e egy kódrész vagy sem.