Выполнение переменных в bash

Я пытаюсь самостоятельно выполнить некоторые скрипты bash.

Предположим, что я хотел бы добавить «hi» в начале строк, таких как:

a="find . -type f" $ for i in $a;do echo hi $i; done

но вывод:

hi find hi . hi -type hi f

Я хотел бы поставить каждое начало выполнения переменной в качестве вывода файла, которое здесь «hi», как я могу это сделать?

EDIT: я хочу добавить hi to very fron из вывода «a», но этот скрипт добавляет привет каждой строке ..

EDIT: для типа -f для -типа f, спасибо @Terrance [ ! d5]

может вывести be;

hi ./me hi ./you

извините за непонятный вопрос, я надеюсь, что вы сможете редактировать работу ...

0
задан 3 August 2017 в 16:52

3 ответа

Цикл for рассматривает $a как строку и не выполняет его.

Используйте $(command), когда вам нужно выполнить что-то внутри другой команды.

Итак, что бы вы сделали в своем случае (пожалуйста, не делайте этого, но следуйте подсказке ниже):

for i in $($a); do echo hi $i; done

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

В вашем случае будет работать следующее:

a="find . -type f"
while IFS= read -r i; do
    echo "hi $i"
done < <($a)

<(command) создает временный файл выходного файла команды.) [!d5 ]

1
ответ дан 22 May 2018 в 19:51
  • 1
    теперь, попробовал это; для i в $a; сделать echo hi $ i; сделано, я получил то, что хочу, но почему мне нужно поставить ``? – solfish 3 August 2017 в 16:46
  • 2
    `...` является более или менее "одинаковым" как $(...). Но я этого не писал ... – RoVo 3 August 2017 в 16:54

Цикл for рассматривает $a как строку и не выполняет его.

Используйте $(command), когда вам нужно выполнить что-то внутри другой команды.

Итак, что бы вы сделали в своем случае (пожалуйста, не делайте этого, но следуйте подсказке ниже):

for i in $($a); do echo hi $i; done

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

В вашем случае будет работать следующее:

a="find . -type f" while IFS= read -r i; do echo "hi $i" done < <($a)

<(command) создает временный файл выходного файла команды.)

1
ответ дан 18 July 2018 в 09:08

Цикл for рассматривает $a как строку и не выполняет его.

Используйте $(command), когда вам нужно выполнить что-то внутри другой команды.

Итак, что бы вы сделали в своем случае (пожалуйста, не делайте этого, но следуйте подсказке ниже):

for i in $($a); do echo hi $i; done

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

В вашем случае будет работать следующее:

a="find . -type f" while IFS= read -r i; do echo "hi $i" done < <($a)

<(command) создает временный файл выходного файла команды.)

1
ответ дан 24 July 2018 в 19:15

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

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