Добър вечер, хора
В момента имам Array наречен inputArray, който съхранява входен файл 7 реда по ред. Имам дума, която е 70000($s0)
, как да разделя думата, така че е 70000 & ($ s0) отделно?
Погледнах отговор, който вече е на този уебсайт, но не можех да го разбера, отговорът, който погледнах, беше:
s="1000($s3)"
IFS="()" read a b <<< "$s"
echo -e "a=<$a>nb=<$b>"
даване на изхода a=<1000> b=<$s3>
Отговори:
1 за отговор № 1Нека да направя този изстрел.
При определени обстоятелства, черупката ще изпълнява "думата разделяне", където серия от текст е разделен на думи. Границите на думите се дефинират от IFS
променлива. Стойността по подразбиране на IFS е: интервал, табулация, нов ред. Когато даден низ е разделен на думи, всяка последователност от този набор от знаци се премахва, за да се извлекат думите.
В примера ви е набор от символи, които разграничават думите (
и )
, Така че думите в този низ, които са ограничени от IFS набора от символи, са 1000
и $s3
Какво е <<< "$s"
? Това е низ от тук. Той се използва за изпращане на низ към стандартен вход на някоя команда. Това е все едно
echo "$s" | read a b
освен тази форма не работи както се очаква в bash. read a b <<< "$s"
работи добре.
Сега, какви са обстоятелствата, при които се разделя думата? Едната е, когато дадена променлива е некотирана. Демо:
IFS="()"
echo "$s" | wc # 1 line, 1 word and 10 characters
echo $s | wc # 1 line, 2 words and 9 characters
Най- read
Командата също разделя низ на думи, за да присвои думи към имената на променливите. Променливата a
получава първата дума и b
получава всичко останало.
Командата с разбивка е:
IFS="()" read a b <<< "$s"
# ^^^^^^^ 1
# ^^^^^^^^ 2
# ^^^^^^^^ 3
- само за продължителността на
read
команда, задайте променливатаIFS
стойността()
- изпрати низа
"$s"
да сеread
"И стандартния вход - от stdin, използвайте
$IFS
за разделяне на входа на думи: задайте първата дума на променливаa
и останалата част от низа към променливатаb
, Завършващи символи от$IFS
в края на низът се изхвърлят.
документация:
- Разделяне на думи
- Тук струните
- Просто изпълнение на командите, описвайки защо това присвояване на IFS е в сила само за продължителността на командата read.
read
команда
Надявам се, че това помага.