![공백 없이 매개변수와 함께 명령을 보내는 방법은 무엇입니까?](https://linux55.com/image/107515/%EA%B3%B5%EB%B0%B1%20%EC%97%86%EC%9D%B4%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EC%99%80%20%ED%95%A8%EA%BB%98%20%EB%AA%85%EB%A0%B9%EC%9D%84%20%EB%B3%B4%EB%82%B4%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
리눅스에서 공백 없이 매개변수로 명령을 실행하는 방법이 있나요?
cat file.txt
다음과 같아야 합니다.
cat(somereplacementforthiswhitespace)file.txt
답변1
값이 공백이거나 더 일반적으로 공백을 포함하는 변수가 있으면 좋을 것입니다.
cat${IFS}file.txt
기본값은 IFS
공백, 탭, 줄 바꿈입니다. 이 문자는 모두 공백입니다. 단일 공간이 필요한 경우 을 사용할 수 있습니다 ${IFS%??}
.
보다 정확하게는 이것이 작동하는 이유는 단어 분할이 작동하는 방식과 관련이 있습니다. 중요한 점은 변수의 값을 교체한 후 적용된다는 점입니다. 그리고 단어 분할은 값의 각 문자를 IFS
구분 기호로 처리하므로 구성을 통해 IFS
null이 아닌 값으로 설정된 한 ${IFS}
단어를 구분할 수 있습니다 . 한 문자보다 길면 IFS
각 문자는 단어 구분 기호입니다. 연속된 공백 구분 기호는 단일 구분 기호로 처리되므로 확장 결과 는 및 cat${IFS}file.txt
두 단어입니다 . 공백이 아닌 구분 기호는 별도로 처리되며 와 같은 것은 두 개의 인수, 즉 빈 인수와 를 받습니다 .cat
file.txt
IFS=',.'; cat${IFS}file.txt
cat
file.txt
답변2
쉘이 , 또는 같은 중괄호 확장과 같은 것을 지원한다고 가정하여 방법을 찾았습니다 ( 중괄호 csh
확장 은 지원되지만 명령 그룹화와의 충돌로 인해 첫 번째 인수로는 지원되지 않음).ksh
bash
yash -o brace-expand
zsh
{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.txt
및no matches found: ,cat,*
어쨌든, 나는 나에게 맞는 더 쉬운 방법을 찾았습니다.
cat<index.js
또는 예를 들면 다음과 같습니다.
cat<*
비윤리적인 방법으로 사용하지 말아주세요. 감사합니다!