#shell #unix #ksh #cut
#оболочка #unix #ksh #вырезать
Вопрос:
Не могли бы вы, пожалуйста, помочь мне с моим запросом. Я запускаю script .ksh с 2 аргументами .. одним из которых является число, подобное 14103, и я хочу извлечь 1410 из этого числа и сохранить его в переменной.
Например, противник:
abc.ksh ST 14103
То, что я делаю, это:
#!/bin/ksh
ENV_TYPE=$1
VER=$2
VER_N=`cut -c1-4 "$VER"`
Но у меня это не работает. Что я упускаю?
Ответ №1:
Если вы имеете в виду, что вам нужны первые 4 символа, вы делаете это полностью внутри bash (который, по моему мнению, намного лучше использовать в оболочке):
VER_N=${VER:0:4}
echo $VER_N
1410
Если вы имеете в виду, что хотите использовать все, кроме последнего символа (опять же в bash):
n=${#VER} # Get length of VER
((n--)) # Decrement
VER_N=${VER:0:$n} # Extract all but last
echo $VER_N
1410
Или все, кроме последнего символа, но с использованием sed
:
VER_N=$(sed 's/.$//' <<< $VER)
Ответ №2:
Команда cut
не использует текст своего аргумента командной строки в качестве текста для cut
.
Когда задается аргумент командной строки, он пытается интерпретировать его как имя файла и прочитать этот файл.
Если аргумент не указан, он считывается из stdin
. В вашем случае проще всего передать входные данные в cut
‘s stdin
, а не создавать временный файл, а затем запрашивать cut
его чтение.
#!/bin/ksh
ENV_TYPE=$1
VER=$2
VER_N=`echo $VER | cut -c1-4 `
echo $VER_N
Вывод:
1410
Комментарии:
1. Вы также можете использовать
VER_N=$(cut -c-4 <<< "$VER")
. Обратите внимание, что 1 в-c1-4
является излишним.