공백 없이 매개변수와 함께 명령을 보내는 방법은 무엇입니까?

공백 없이 매개변수와 함께 명령을 보내는 방법은 무엇입니까?

리눅스에서 공백 없이 매개변수로 명령을 실행하는 방법이 있나요?

cat file.txt

다음과 같아야 합니다.

cat(somereplacementforthiswhitespace)file.txt

답변1

값이 공백이거나 더 일반적으로 공백을 포함하는 변수가 있으면 좋을 것입니다.

cat${IFS}file.txt

기본값은 IFS공백, 탭, 줄 바꿈입니다. 이 문자는 모두 공백입니다. 단일 공간이 필요한 경우 을 사용할 수 있습니다 ${IFS%??}.

보다 정확하게는 이것이 작동하는 이유는 단어 분할이 작동하는 방식과 관련이 있습니다. 중요한 점은 변수의 값을 교체한 후 적용된다는 점입니다. 그리고 단어 분할은 값의 각 문자를 IFS구분 기호로 처리하므로 구성을 통해 IFSnull이 아닌 값으로 설정된 한 ${IFS}단어를 구분할 수 있습니다 . 한 문자보다 길면 IFS각 문자는 단어 구분 기호입니다. 연속된 공백 구분 기호는 단일 구분 기호로 처리되므로 확장 결과 는 및 cat${IFS}file.txt두 단어입니다 . 공백이 아닌 구분 기호는 별도로 처리되며 와 같은 것은 두 개의 인수, 즉 빈 인수와 를 받습니다 .catfile.txtIFS=',.'; cat${IFS}file.txtcatfile.txt

답변2

쉘이 , 또는 같은 중괄호 확장과 같은 것을 지원한다고 가정하여 방법을 찾았습니다 ( 중괄호 csh확장 은 지원되지만 명령 그룹화와의 충돌로 인해 첫 번째 인수로는 지원되지 않음).kshbashyash -o brace-expandzsh

{cat,file.txt}

이렇게 하면 매개변수에 공백을 사용할 필요가 없습니다.

답변3

대안은 변수 확장과 함께 IFS 값을 사용하는 것입니다.

$ echo Hello! > file.txt

$ IFS=:
$ a=cat:file.txt
$ $a
Hello!

답변4

OP는 6년 전,

시간은 흐른다.

하지만 이전 답변이 효과가 없었던 분들을 위해 이 글을 게시하고 있습니다.

개인적으로 좋아 cat${IFS%???}file.txt하거나 {cat,*}: command not found: cat file.txtno matches found: ,cat,*

어쨌든, 나는 나에게 맞는 더 쉬운 방법을 찾았습니다.

cat<index.js

또는 예를 들면 다음과 같습니다.

cat<*

비윤리적인 방법으로 사용하지 말아주세요. 감사합니다!

관련 정보