Печать двух переменных в одной строке

Я хотел, чтобы две печати были переменными в одной строке. Я использую цикл сценария оболочки #!/bin/sh, и то, что я хотел сделать, это повтор for, который выводит что-то вроде:

variable1_case1 variable2_case2

, и я уже пробовал

variable$i_case$i.
2
задан 13 September 2017 в 19:09

9 ответов

for i in 1 2; do
  echo variable${i}_case$i
done

должен делать то, что вы хотите. Замените 1 2 номерами или строками, которые вам нужны. В зависимости от значений $i вам может потребоваться процитировать его так: echo variable"$i"_case"$i".

5
ответ дан 22 May 2018 в 18:30
for i in 1 2; do echo variable${i}_case$i done

должен делать то, что вы хотите. Замените 1 2 номерами или строками, которые вам нужны. В зависимости от значений $i вам может потребоваться процитировать его так: echo variable"$i"_case"$i".

5
ответ дан 18 July 2018 в 06:55
for i in 1 2; do echo variable${i}_case$i done

должен делать то, что вы хотите. Замените 1 2 номерами или строками, которые вам нужны. В зависимости от значений $i вам может потребоваться процитировать его так: echo variable"$i"_case"$i".

5
ответ дан 24 July 2018 в 18:42

Я предполагаю, что проблема в вашем скрипте заключается в том, что вы пытаетесь встроить имена переменных непосредственно в текстовую строку, чтобы за ними следуют другие символы, которые могут быть частью имени переменной. Они не только включают буквенно-цифровые символы, но и подчеркивание.

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

$ i=42
$ echo "variable${i}_case${i}."
variable42_case42.
4
ответ дан 22 May 2018 в 18:30
  • 1
    Этот ответ не является полным, но лучше относится к строке echo .. – derHugo 13 September 2017 в 19:26
  • 2
    Я сомневаюсь, что точка нужна, но если это так, она не может быть частью имени переменной, поэтому echo ${i}_$i. работает нормально. – dessert 13 September 2017 в 19:46
  • 3
    Да, до тех пор, пока не будет продолжения вывода после строки, она работает. Поэтому я сказал, что этот ответ охватывает общие случаи и, следовательно, лучше. Но в любом случае ОП принял свое решение;) – derHugo 13 September 2017 в 20:07
  • 4
    @dessert Да, вы абсолютно правы, что $i. также будет действительным. Я просто думаю, что если это разумно, стиль написания должен быть согласованным по одной команде. Это оставляет меньше места для ошибок. – Byte Commander 13 September 2017 в 20:37
  • 5
    @ByteCommander У вас там есть точка. – dessert 13 September 2017 в 20:51

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

#!/bin/sh
while read a b; do
    echo variable:${a}_case:${b}
done

, который создаст этот вывод:

/tmp/test.sh < /tmp/dat1 
variable:1_case:2
variable:3_case:4

и файл данных dat1, содержащий:

1 2
3 4
0
ответ дан 22 May 2018 в 18:30

Я предполагаю, что проблема в вашем скрипте заключается в том, что вы пытаетесь встроить имена переменных непосредственно в текстовую строку, чтобы за ними следуют другие символы, которые могут быть частью имени переменной. Они не только включают буквенно-цифровые символы, но и подчеркивание.

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

$ i=42 $ echo "variable${i}_case${i}." variable42_case42.
4
ответ дан 18 July 2018 в 06:55

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

#!/bin/sh while read a b; do echo variable:${a}_case:${b} done

, который создаст этот вывод:

/tmp/test.sh < /tmp/dat1 variable:1_case:2 variable:3_case:4

и файл данных dat1, содержащий:

1 2 3 4
0
ответ дан 18 July 2018 в 06:55

Я предполагаю, что проблема в вашем скрипте заключается в том, что вы пытаетесь встроить имена переменных непосредственно в текстовую строку, чтобы за ними следуют другие символы, которые могут быть частью имени переменной. Они не только включают буквенно-цифровые символы, но и подчеркивание.

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

$ i=42 $ echo "variable${i}_case${i}." variable42_case42.
4
ответ дан 24 July 2018 в 18:42
  • 1
    Этот ответ не является полным, но лучше относится к строке echo .. – derHugo 13 September 2017 в 19:26
  • 2
    Я сомневаюсь, что точка нужна, но если это так, она не может быть частью имени переменной, поэтому echo ${i}_$i. работает нормально. – dessert 13 September 2017 в 19:46
  • 3
    Да, до тех пор, пока не будет продолжения вывода после строки, она работает. Поэтому я сказал, что этот ответ охватывает общие случаи и поэтому лучше. Но в любом случае ОП принял свое решение;) – derHugo 13 September 2017 в 20:07
  • 4
    @dessert Да, вы абсолютно правы, что $i. также будет действительным. Я просто думаю, что если это разумно, стиль написания должен быть согласованным по одной команде. Это оставляет меньше места для ошибок. – Byte Commander 13 September 2017 в 20:37
  • 5
    @ByteCommander У вас там есть точка. – dessert 13 September 2017 в 20:51

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

#!/bin/sh while read a b; do echo variable:${a}_case:${b} done

, который создаст этот вывод:

/tmp/test.sh < /tmp/dat1 variable:1_case:2 variable:3_case:4

и файл данных dat1, содержащий:

1 2 3 4
0
ответ дан 24 July 2018 в 18:42

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

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