объединение двух команд в одну команду

while read pos; do
string1= echo $pos | cut -c 20-38
string2="=$pos"
string3="$string1 $string2"
echo "$string3"
done < file

Это код моего сценария. Я хочу отобразить вывод в одной строке, но вывод происходит в разных строках.

pos = abcdefghi1234567890QWERTYUXY.tar.gz
string1 = 1234567890QWERTYUXY
string2 = abcdefghi1234567890QWERTYUXY.tar.gz

Требуется вывод:

1234567890QWERTYUXY abcdefghi1234567890QWERTYUXY.tar.gz

Но две строки отображаются в двух разных строках. Я хочу отобразить вывод в 1 строке.

1
задан 23 February 2011 в 14:14

3 ответа

Пара изменяется, и она должна работать:
Обычно то, когда Вы используете переменную как Вы, сделало в эхе, исходная переменная остается, как это было, таким образом, Ваше использование строки 2 совершенно не нужно. Кроме того, я имею привычку использовать фигурные скобки для {включения} переменных, таким образом, на них можно сослаться прямо в текста, работа фигурных скобок для разграничивания имени переменной, просто поместите знак доллара впереди (пример для следования).

1-, Когда Вы первый набор string1, не помещайте пробелы по обе стороны от знака "равно".
2-при присвоении результатов команды к переменной, необходимо вынудить команду выполняться, единственные задние галочки (символ слева от № 1 включают американские клавиатуры), окружение команды делает это.
3-часов для количества символов, которые Вы сокращаете, Ваш код и пример, не соглашаются. Так, чтобы строка была похожа:

string1=`echo $pos | cut -c 20-38`

Другая вещь состоит в том, когда Вы устанавливаете одно значение от другого, не включают дополнительный знак "равно". Таким образом, код для установки string2 должен быть похожим:

string2="$pos"

Я полагаю, что следующее сделает, как Вы запрашиваете, я скорректировал счетчики символов для предоставления вывода примера:

Вход "файл" для моего теста содержал:
abcdefghi1234567890QWERTYUXY.tar.gz

И мой сценарий:

 #!/bin/sh
while read pos; do
string1=`echo ${pos} | cut -c 10-28`
echo "${string1} ${pos}"
done < file

Вывод похож:
1234567890QWERTYUXY abcdefghi1234567890QWERTYUXY.tar.gz

Который является точно, что я полагаю, что Вы просите.

3
ответ дан 23 February 2011 в 14:14

Bash имеет мощную подстановку переменных, которая избавит вас от необходимости создавать дополнительные переменные и направлять их в другую команду. Может быть, попробовать что-то вроде этого

while read pos; do
  echo "${pos} ${pos%.tar.gz}"
done

Общая форма ${var%Pattern} - удалить из $ var самую короткую часть $Pattern, которая соответствует заднему концу $var.

http://www.tldp.org/LDP/abs/html/parameter-substitution.html

0
ответ дан 23 February 2011 в 14:14

Вы можете направить вывод через sed, а именно:

echo "$string3" | sed ':a;N;$!ba;s/\n/ /g'

Весь кредит Жолт Ботыкай в StackOverflow за его ответ

0
ответ дан 23 February 2011 в 14:14

Другие вопросы по тегам:

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