Fish shell: 변수에 파이프를 연결하거나 읽어서 여러 줄의 출력을 캡처합니다.

Fish shell: 변수에 파이프를 연결하거나 읽어서 여러 줄의 출력을 캡처합니다.

만약 너라면

curl https://www.toptal.com/developers/gitignore/api/python

개행 문자가 포함된 예상대로 파일이 표시됩니다. 하지만 만약 내가

set response (curl https://www.toptal.com/developers/gitignore/api/python)
echo $response

물고기의 개행 문자가 사라졌습니다. 물고기를 본 적은 read있지만

url $gitignoreurlbase/python | read response # I have also tried read -d 'blah'
echo $response

그냥 공백으로 표시하세요.

여러 줄의 출력을 캡처하는 방법은 무엇입니까?

답변1

set var (command)사용. . . 교체set var (command | string split0)

설명하다:

기본적으로 명령 대체는 줄 바꿈으로 분할됩니다. $response 변수는행 목록산출. 이것은파일에 기록하다

$ set var (seq 10)
$ set --show var
$var: not set in local scope
$var: set in global scope, unexported, with 10 elements
$var[1]: length=1 value=|1|
$var[2]: length=1 value=|2|
$var[3]: length=1 value=|3|
$var[4]: length=1 value=|4|
$var[5]: length=1 value=|5|
$var[6]: length=1 value=|6|
$var[7]: length=1 value=|7|
$var[8]: length=1 value=|8|
$var[9]: length=1 value=|9|
$var[10]: length=2 value=|10|
$var: not set in universal scope

다행히 치료법도 마찬가지다.

$ set var (seq 10 | string split0)
$ set -S var
$var: not set in local scope
$var: set in global scope, unexported, with 1 elements
$var[1]: length=21 value=|1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n|
$var: not set in universal scope

# OR
$ set oldIFS $IFS
$ set --erase IFS
$ set var (seq 10)
$ set -S var
$var: not set in local scope
$var: set in global scope, unexported, with 1 elements
$var[1]: length=20 value=|1\n2\n3\n4\n5\n6\n7\n8\n9\n10|
$var: not set in universal scope
$ set IFS $oldIFS

string split0후행 줄 바꿈 유지의 차이점에 유의하세요.

$response를 줄 목록으로 사용하는 데 동의하지만 이를 올바르게 표시하려는 경우:

printf "%s\n" $response

# or, with just a literal newline as the join string
string join "
" $respose

관련 정보