В соответствии с вопросом, который вы хотите удалить _, который находится в начале
Method1
echo "_some_String"| sed "s/^_//g"
output
some_String
Method2
echo "_some_String"| perl -pne "s/^_//g"
output
some_String
Method3
echo "_some_String"| awk '{gsub("^_","",$1);print $0}'
output
some_String
Не большая разница в результате для внешних команд. Выполнение env
просто включает дополнительный exec
для выполнения синтаксического анализа присваивания переменной, который в противном случае выполняла бы оболочка. env -i
был бы более полезен, так как он очищает среду, что не так просто сделать в оболочке.
В обоих случаях расширения, такие как подстановка команд VAR=$(somecmd)
, выполняются оболочкой до того, как произойдут назначения, и оба случая следуют за PATH
и т. д. Единственное различие, которое я могу придумать, это значение _
, который Bash устанавливает в имя команды, которую он запускает (, но env
нет ). Конечно, без env
вы также можете запустить встроенную версию команды оболочки.