이것이 문자열이라고 가정합니다.
'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
)으로 제공하는 것이 더 나을 수 있습니다. 보다 표준적일 뿐만 아니라 모든 명령줄 인수를 합칠 수 있는 최대 길이가 있으며 파일은 그보다 길 수 있습니다. 지금 작동하더라도 시간이 지남에 따라 해당 파일이 더 커질 수 있다면 결국 모든 것을 인수로 전달하면 "인수 목록이 너무 김" 오류와 함께 작동이 중지됩니다.
으로 그 한계를 찾을 수 있습니다 getconf ARG_MAX
. 크기는 매우 다양합니다. 여기에는 2MB 제한과 256KB 제한이 있는 시스템이 있습니다. 파일이 항상 작다면 걱정할 필요가 없습니다. 하지만 그렇지 않으면 데이터를 스크립트로 가져오는 다른 방법을 시도해야 합니다.