![Bash 스크립트: 따옴표와 작은 따옴표가 포함된 bash 스크립트에 변수를 전달합니다. 잠깐만요 [닫음]](https://linux55.com/image/38501/Bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%3A%20%EB%94%B0%EC%98%B4%ED%91%9C%EC%99%80%20%EC%9E%91%EC%9D%80%20%EB%94%B0%EC%98%B4%ED%91%9C%EA%B0%80%20%ED%8F%AC%ED%95%A8%EB%90%9C%20bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%A0%84%EB%8B%AC%ED%95%A9%EB%8B%88%EB%8B%A4.%20%EC%9E%A0%EA%B9%90%EB%A7%8C%EC%9A%94%20%5B%EB%8B%AB%EC%9D%8C%5D.png)
이것이 문자열이라고 가정해 봅시다:
'a',"b"
작은따옴표와 큰따옴표가 포함되어 있습니다.
이것을 bash 스크립트에 단일 문자열로 전달하려면 어떻게 해야 합니까?
Bash 스크립트는 다음과 같습니다.
#!/bin/bash
echo $1
그것은 울려야 한다
'a',"b"
하지만 문자열이 너무 작다고 가정할 수는 없습니다. 결국은 전부 보내려고 합니다
/etc/httpd/conf/httpd.conf
이 bash 스크립트의 문자열로.
따라서 따옴표와 작은 따옴표를 동시에 벗어날 수는 없습니다.
답변1
당신은 그것을 사용할 수 있습니다명령 대체:
oo.sh "$(cat /etc/httpd/conf/httpd.conf)"
이것은 실행되어 cat /etc/httpd/conf/httpd.conf
출력(파일의 내용)을 주어진 첫 번째 인수에 넣습니다 oo.sh
. 인용되어 있으므로 단일 인수로 전달됩니다. 공백과 특수 문자는 영향을 받지 않고 전달됩니다. oo.sh
매개변수를 가져옵니다.
그러나 보다 광범위하게는 가능하면 파일 이름을 스크립트에 전달하거나 파일 내용을 표준 입력( oo.sh < /etc/httpd/conf/httpd.conf
)으로 전달하는 것이 좋습니다. 보다 표준적인 것 외에도 모든 명령줄 매개변수를 결합한 최대 길이가 있으며 파일은 이 길이보다 길 수 있습니다. 지금 작동하더라도 시간이 지남에 따라 파일이 더 커질 수 있다면 결국 전체 파일을 인수로 전달하면 "arg list too long" 오류와 함께 작동이 중지됩니다.
를 사용하여 이 제한을 찾을 수 있습니다 getconf ARG_MAX
. 크기는 매우 다양합니다. 내 시스템에는 2MB 제한과 256KB 제한이 있습니다. 파일이 항상 작다면 걱정할 필요가 없습니다. 하지만 그렇지 않으면 데이터를 스크립트로 가져오는 다른 방법을 시도해야 합니다.