Я принимаю несколько строк в качестве пользовательского ввода в мой сценарий, как -заглавной каждый входной строки в сценарии оболочки
read -p "User's full name : " FULLNAME
read -p "User's Manager's name : " MGRNAME
.
.
Я хочу, чтобы все входные строки капитализироваться, то есть капитализировать каждое слово в строке ввода.
Я написал простую функцию, как -
capitalize()
{
$1=`echo ${$1}|sed -e "s/\b\(.\)/\u\1/g"`
}
и назвал эту функцию -
capitalize FULLNAME
Это дает ошибку ниже -
line 77: ${$1}: bad substitution
Также пытался косвенное расширение -
capitalize()
{
$1=`echo ${!1^}`
}
Он бросает ошибку ниже -
line 77: FULLNAME=Kamlesh: command not found
Пожалуйста, помогите с правильным синтаксисом или любым другим способом, чтобы достичь этого.
Образец вывода - я читаю ввод в переменной FULLNAME. Когда я вызываю функцию capitalize(), она должна обновлять значение внутри самой переменной FULLNAME.
Для например, если пользовательский ввод - "Kamlesh gallani"
Если я называю капитализировать FULLNAME сейчас, то FULLNAME должен содержать "Kamlesh Gallani"
Вы помечено как Ksh и Баш. Который из? Существуют синтаксические расширения в bash 4.x, которые здесь важны, что ksh не имеет. ** Пожалуйста, отметьте тег только для оболочки, которую вы на самом деле используете. ** –
BTW, как и для '$ {$ 1}', если вы хотите, чтобы это работало, вы должны искать [косвенное расширение] (http: // mywiki .wooledge.org/BashFAQ/006 # Evaluating_indirect.2Freference_variables). –
(... в другом примечании имена переменных all-caps используются переменными со значением для системы и оболочки, тогда как пространство имен переменных с хотя бы одним строчным символом зарезервировано для использования приложения. Таким образом, ваши сценарии должны использовать чтобы избежать перезаписи чего-либо со значением в операционную систему по ошибке. Это определяется правилами POSIX для переменных среды, но установка переменной оболочки, которая перекрывает имя переменной среды, перезапишет последнее, поэтому правило применяется как в места). –