#interpolation #fish
#интерполяция #рыба
Вопрос:
Комментарии:
1.
echo a(echo b)c
… см . fishshell.com/docs/current/index.html#expand
Ответ №1:
echo a(echo b)c
Если у вас есть кавычки, вы должны выйти из них:
echo "a"(echo b)"c"
Если в вашей подкоманде могут быть новые строки, начиная с fish 2.3, вам необходимо сохранить и восстановить $IFS:
set -l IFS
echo "a"(cat ~/file.txt)"c"
set -e IFS
В конечном итоге string
вы сможете справиться с этим случаем.
Комментарии:
1. Это каким-то образом проглотит все символы новой строки и, по-видимому, не является эквивалентным. Минимальный пример: учитывая
echo -e "anb" > x
, что тогда bashecho "$(cat x)"
делает правильные вещи, тогда как fishecho (cat x)
преобразует новую строку в пробел (что было бы эквивалентно bashecho $(cat x)
без кавычек).2. Неужели по-прежнему нет другого способа сделать это, кроме как установить
IFS
значение empty ?3.
string collect
теперь доступно, чтобы избежать разделения новой строки. Пример использования:echo (cat x | string collect)