
나는 이런 이유로 한동안 머리를 긁적였습니다.
> cat file
line1
line2
> set tst (cat file)
> echo "$tst"
line1 line2
> set tst "(cat file)"
> echo "$tst"
(cat file)
bash
다음과 같이 수행할 수 있습니다 .
$ cat file
line1
line2
$ tst=$(cat file)
$ echo "$tst"
line1
line2
답변1
기본적으로 fish는 명령 대체를 분할합니다( (command)
). 이 동작을 무시하려면 특수 기능을 사용할 수 있습니다.끈string split
(분할 대상을 정의할 수 있음), string split0
(NUL 바이트 분할) 및 string collect
([0]을 전혀 분할하지 않음) 과 같은 하위 명령입니다 .
대답은 다음과 같습니다.
set tst (cat file | string collect)
echo $tst
[0]: Unix는 인수를 NUL 종료 문자열로 전달하기 때문에 NUL 바이트를 명령에 전달할 수 없습니다. 따라서 명령은 인수가 계속되는지 알 수 없으므로 string collect
실제로 첫 번째 NUL까지 명령 출력을 캡처합니다. 최대 하나의 항목이 있어 string split0
여러 매개변수가 발생할 수 있습니다.
답변2
Fish는 명령 대체 결과를 다음과 같이 저장합니다.행 목록( string collect
if를 사용하지 않는 한). 그래서 당신은 할 수 있습니다
> set tst (cat file)
> printf '%s\n' $tst
line1
line2