Как к верхнему регистру параметр командной строки?

Я не знаю, как заставить псевдоним работать в CVS, но что можно сделать, записать сценарий, который вызывает энергию путем, Вы хотите.

Сценарий просто был бы:

#!/bin/sh
vim -S ~/myscript.vim "$@" 

И затем просто сохраните его где-нибудь в Вашем $PATH с именем rvimmy-vim (например, /usr/local/bin/my-vim), и необходимо смочь использовать my-vim как команда и на Вашей командной строке и из CVS.

Если Вы не хотите помещать сценарий в глобальный каталог в Вашей системе или не имеете прав на, просто создаете $HOME/bin, поместите сценарий там и добавьте его к Вашему $PATH.

127
06.08.2017, 06:33
5 ответов

Синтаксис str^^ то, которое Вы пробуете, доступно от Bash 4.0 и выше. Возможно, Ваш - более старая версия (или Вы запустили скрипт с sh явно):

Попробуйте это:

str="Some string"
printf '%s\n' "$str" | awk '{ print toupper($0) }'
154
27.01.2020, 19:29
  • 1
    От слов mtk я понял, что модификация корпуса на самом деле работает на него с переменными. –  manatwork 16.10.2012, 15:46
  • 2
    @manatwork, Который ясно не указан в начальном вопросе. Плохое сообщение об ошибке замены совпадает с Вами, добрался бы с более старыми версиями удара. –  Bernhard 16.10.2012, 15:48
  • 3
    Вы корректны. Я проверил версию, ее 3.2.25. Ваше решение работает, и также я попробовал tr '[a-z]' [[A-Z]'. –  mtk 16.10.2012, 15:51
  • 4
    @mtk, Который должен быть tr '[a-z]' '[A-Z]'. –  l0b0 17.10.2012, 12:43
  • 5
    я работаю GNU bash, version 4.3.42(1)-release (x86_64-apple-darwin14.5.0), и я получаю ту же ошибку как OP, таким образом, я не думаю, что это доступно на любом bash 4.0 и выше как Вы говорите. –  Heath Borders 27.01.2016, 01:19

Будьте осторожны с tr, если вы не используете только A – Z. Для других локалей даже '[: lower:]' '[: upper:]' не работает, работают только awk-файлы toupper и bash (v4 +)

$ str="abcåäö"
$ echo "$str"|tr '/a-z/' '/A-Z/'
ABCåäö
$ echo "$str"|LC_ALL=sv_SE tr '[:lower:]' '[:upper:]'
ABCåäö
$ echo "$str"|awk '{print toupper($0)}'
ABCÅÄÖ
$ echo ${str^^} # Bash 4.0 and later
ABCÅÄÖ
$ STR="ABCÅÄÖ"
$ echo ${STR,,}
abcåäö
25
27.01.2020, 19:29
echo "lowercase" | tr a-z A-Z

Вывод:

LOWERCASE
88
27.01.2020, 19:29

Если кто-то по-прежнему получает ошибку при попытке ${str^^}, вы можете попробовать python -cили perl. Вероятно, это связано с тем, что версия bash ниже 4.

Но до сих пор bash 4 или более поздней версии быстро работает с существующим решением.

L2U="I will be upper"

Использование python -cв bash

python -c "print('$L2U'.upper())"
I WILL BE UPPER

Точно так же его также можно использовать для капитализации с помощью:

service="bootup.sh on home"
python -c "print('$service'.capitalize())"
Bootup.sh on home

Использованиеperl

echo $L2U | perl -ne 'print "\U$_"'
I WILL BE UPPER
0
27.01.2020, 19:29

Кроме того, вы можете переключиться на ksh или zsh, которые десятилетиями поддерживали преобразование регистра (задолго до bash${var^^}, добавленного в 4.0 ), хотя и с другим синтаксисом:

#! /bin/ksh -
typeset -u upper="$1"
printf '%s\n' "$upper"

(также работает с zsh; обратите внимание, что в pdksh/mksh это работает только для букв ASCII ).

С помощью zshвы также можете использовать флаг расширения параметра U:

#! /bin/zsh -
printf '%s\n' "${(U)1}"

POSIXLY, вы можете использовать:

awk 'BEGIN{print toupper(ARGV[1])}' "$1"

Есть также:

printf '%s\n' "$1" | tr '[:lower:]' '[:upper:]'

Но в некоторых реализациях, включая GNU tr, это работает только для однобайтовых -символов (, поэтому в UTF -8 локалей только для букв ASCII ).

3
27.01.2020, 19:29

Теги

Похожие вопросы