두 개 이상의 변수를 포함하는 복합 변수 확장

두 개 이상의 변수를 포함하는 복합 변수 확장

다음과 같은 5가지 변수가 있습니다.

drt="/var/www/html"

drt_chown="chown -R www-data:www-data ${drt}/"
drt_chmod="chmod -R a-x,a=rX,u+w ${drt}/"
rss="systemctl restart nginx.service"
rpf="/etc/init.d/php*-fpm restart"

나는 마지막 4개의 변수를 결합/연결/추가하려고 합니다.복합변수rse한 번에 쉽게 확장할 수 있도록 이름을 지정했습니다 .

rse="${drt_chown} ; ${drt_chmod} ; ${rss} ; ${rpf}"

그런 다음 확장하려고합니다 rse.

${rse}

불행하게도 이 확장은 rse다음 오류로 인해 실패합니다.

chown: cannot access ';': No such file or directory
chown: cannot access 'chmod': No such file or directory
chown: cannot access 'a-x,a=rX,u+w': No such file or directory
chown: cannot access ';': No such file or directory
chown: cannot access 'systemctl': No such file or directory
chown: cannot access 'restart': No such file or directory
chown: cannot access 'nginx.service': No such file or directory
chown: cannot access ';': No such file or directory
chown: cannot access 'restart': No such file or directory

내 질문은 복합 변수를 확장하는 정확하고 가장 짧은 방법은 무엇입니까? 아니면 적어도 최선의 선택은 무엇이라고 생각하시나요?

측면나에게 매우 중요합니다.


노트:

1. 현재 질문은 다음 질문에 대한 후속 질문입니다.이 문제, 실수로 질문했습니다(실제로 현재 질문을 묻고 싶었기 때문입니다).

2. 구글 키워드(태그에서는 불가능): 호스트 변수/메가변수 또는 변수를 확장하는 변수입니다.

답변1

변수를 연결하는 것은 문제가 되지 않습니다. 두 할당 모두 rse문자열을 연결하는 데 문제가 없습니다. 문제는 이전 문제와 동일합니다. ;and &&(and &and |and 등)와 같은 >특수 연산자 는 변수 확장 후에 해석되지 않습니다."

즉, 여기에는 리디렉션이나 조건이 없으며 문자열 내의 변수 확장(일종의 문자열 연결)만 있습니다. 따옴표 cmd도 특별하지 않습니다.

$ cmd1='echo "foo" > bar'
$ cmd2='echo "false"'
$ cmd="$cmd1 || $cmd2"
$ $cmd
"foo" > bar || echo "false"

대신에 함수를 사용해야 할 것입니다.

drt="/var/www/html"
drt_chown() { chown -R www-data:www-data "${drt}/"; }

그런 다음 다른 명령처럼 실행하고 을 사용하면 drt_chown변수의 현재 값이 적용됩니다 drt.

더 나은 방법은 함수가 매개변수를 받아들이도록 하는 것입니다.

www_chown() { chown -R www-data:www-data "$1"; }

www_chown /var/www/html

그런 다음 원하는 경우 다른 함수를 호출하는 함수를 만들 수 있습니다.

doitall() {
    drt_chown &&
    drt_chmod &&
    ...
}

관련 정보