2012-01-20 2 views
0

Я попытался DONG это мой сам, но я с треском провалилась, но это в основном то, что я пытаюсь добиться в ш (#/бен/ш!):Проверьте размер строки и в зависимости от размера, манипулируйте им?

Судо код

SOMEVAR="VALUE" 

if [ $SOMEVAR.length > 5] 
then 
# Take the first 5 characters of the string and add "HIS" to the end of them, assigning this new value to the SOMEVAR variable. 
else 
#just add "HIS" to the end of the string 
fi 

если кто-то может сказать мне, как я могу это сделать, было бы очень полезно, я попытался использовать $ {# SOMEVAR}> 5 и $ {SOMEVAR: 0: 5}, но эта dosnet работает для меня.

благодаря

+0

вы действительно использует «ш» (Bourne Shell, на старой линии Unix платформах поставщика)? Или вы хотите вернуть его с помощью bash или ksh или ??? Удачи. – shellter

ответ

4

Чтобы это работать в Bourne, вы можете использовать:

#!/bin/sh 
SOMEVAR="HELLO WORLD" 
if [ ${#SOMEVAR} -gt 5 ] 
then 
    SOMEVAR=`expr substr "$SOMEVAR" 1 5`  
fi 
SOMEVAR="${SOMEVAR}HIS" 
+2

+1, но поскольку «expr substr foo 1 5» печатает «foo», вы можете пропустить проверку длины и просто сделать SOMEVAR = $ (expr substr «$ SOMEVAR» 1 5) ЕГО –

1

Вы, вероятно, используете версию Bourne, которая может сделать это в одной строке без привлечения каких-либо других команд, как expr :

SOMEVAR=${SOMEVAR:0:5}HIS 

Но если ваша оболочка не поддерживает этот фантастический синтаксис выделения подстроки, вы можете использовать sed. (Обратите внимание, что не все версии поддержки expr подстроки.)

SOMEVAR=`echo "$SOMEVAR" | sed 's/^\(.....\).*/\1/'`HIS 
Смежные вопросы