Per la portabilità, puoi tranquillamente presumere che #!/bin/sh troverà una shell per lo più conforme a POSIX su qualsiasi sistema Unix o Linux standard, ma questo è tutto. 
 In FreeBSD, OpenBSD e NetBSD ( insieme a DragonFly, PC-BSD e alcuni altri derivati), bash si trova in /usr/local/bin/bash (se è installato), quindi /usr/bin/env fornisce la portabilità tra Linux e BSD. 
 Android non è un sistema Unix o Linux standard. Sul mio telefono Android non rootato, nessuno di /usr/bin/env, /bin/bash o r anche /bin/sh esiste e la shell di sistema è /system/bin/sh. 
 Uno script di shell a cui manca il #! (shebang) tenterà di essere eseguito nella shell che lo ha chiamato su alcuni sistemi, oppure potrebbe utilizzare un interprete predefinito diverso (/bin/bash ad esempio) , su altri sistemi. E sebbene  questo  possa funzionare su Android, non è garantito che funzioni in altri sistemi operativi, dove gli utenti possono scegliere di utilizzare una shell interattiva diversa da bash. (Uso tcsh in FreeBSD, dove è la shell predefinita, e gli script senza shebang sono interpretati dalla shell chiamante.) 
 Quindi da dove mi siedo, sembra che  sia non è possibile  creare uno script di shell che sia portabile tra sistemi Android e non Android (Linux o Unix), perché Android fa le cose in modo diverso. 
 Commenti 
 
 Nella mia esperienza, #!/bin/sh e #!/bin/bash hanno sempre trovato lambiente giusto sui pochi sistemi su cui ho lavorato . Devo ancora incontrare uneccezione. Trovo anche che venga utilizzato regolarmente nei testi relativi allo scripting della shell che suppongo siano scritti tenendo presente la portabilità a causa del pubblico diversificato. 
 Non posso “dire lo stesso con #!/usr/bin/env.Alcuni sistemi lo hanno installato come #!/bin/env e in passato hanno danneggiato i miei script Python. Quindi, vado con il secondo punto. 
 Ecco un po di supporto per la mia dichiarazione di cui sopra: 
 Sulla versione 5.7 di CentOS ottengo quanto segue: 
$ which env /bin/env 
 Su Ubuntu 12.04 Precise Pangolin: 
$ which env /usr/bin/env 
 Inoltre, almeno in un vecchio sistema, ricordo gli amministratori installato coreutils su /opt per qualche motivo (potrebbe non essere una best practice). Poiché env fa parte di coreutils, gli utenti hanno finito per ottenerlo a /opt/coreutils/bin/env. Devo ammettere che non ho utilizzato tutti i sistemi disponibili, quindi la risposta si basa sulla mia esperienza limitata. 
 Commenti 
 
/bin/bashnon è sicuramente FreeBSD (sarebbe essere/usr/local/bin/bashpoiché bash non fa parte delle shell predefinite)./usr/bin/env(SCO che è barel y esistente, NextStep che è quasi estinto, oltre ovviamente ai più comuni sistemi non unix come Android o Windows). Daltra parte,/bin/bashesiste praticamente solo su Linux non incorporato./bin/shè una scommessa sicura su qualsiasi Unix, ma alcuni sistemi meno recenti hanno una shell Bourne non POSIX.which envnon è ' t rilevante: ci sono diversi sistemi in cui/usr/binè un collegamento simbolico a/bino viceversa, il che rende entrambi/usr/bin/enve/bin/envutilizzabile. Ciò che conta è che/usr/bin/envsia presente, come nel caso di tutte le distribuzioni Linux di cui ' ho mai visto o sentito parlare (e rimuovendolo romperebbe così tante cose che nessuno lo farebbe).