Bash 스크립트의 변수에서 명령 실행

Naila Saad Siddiqui 2024년2월15일
  1. Bash 스크립트 변수
  2. Eval 명령을 사용하여 Bash 스크립트의 변수에서 명령 실행
  3. bash-c 플래그와 함께 사용하여 Bash 스크립트의 변수에서 명령 실행
  4. 명령 대체 $()를 사용하여 Bash 스크립트의 변수에서 명령 실행
Bash 스크립트의 변수에서 명령 실행

이 가이드는 Bash 명령을 변수에 저장하고 나중에 이 변수에서 직접 실행하는 방법에 대해 설명합니다. 먼저 변수에 포함된 명령을 실행하는 여러 가지 방법에 대해 설명하고 몇 가지 스크립트 예제를 살펴봅니다.

시작하자.

Bash 스크립트 변수

변수는 Bash에서 제공하는 필수 기능입니다. if 제어 구조, case 구조 또는 단순히 스크립트 내에서 사용하든 관계없이 스크립트를 정리할 뿐만 아니라 스크립트를 훨씬 쉽게 이해할 수 있습니다.

또한 스크립트로 실행할 수 있으므로 많은 명령을 파이핑하고 명령이 매우 길 때 특히 더 쉽게 작업할 수 있습니다. 이렇게 하면 100단어가 될 수도 있는 스크립트의 길이가 12단어가 되지 않을 수도 있는 하나로 줄어듭니다.

100단어 길이의 스크립트와 12단어도 안되는 스크립트를 디버깅한다고 상상해 보십시오. 절약할 수 있는 시간을 고려하십시오.

때때로 우리는 사용자로부터 명령을 받아 변수에 저장하고 일부 비즈니스 로직을 적용한 후 조건부로 일부 명령을 실행하는 Bash 래퍼를 작성해야 합니다(일련의 if-else 결정). 이제 이러한 시나리오에서 변수에 저장된 명령을 구문 분석하고 해석하여 Bash 명령으로 실행하는 데 도움이 되는 방법을 살펴봐야 합니다.

여기에서는 변수에 포함된 명령을 실행하는 가장 효율적인 몇 가지 방법에 대해 설명합니다.

Eval 명령을 사용하여 Bash 스크립트의 변수에서 명령 실행

일부 Bash 스크립트에서는 입력 값 또는 변수(예:)를 사용하여 문자열을 작성하고 마지막에 명령으로 실행해야 합니다. eval 명령은 이러한 상황에서 해답입니다.

쉘 명령과 같은 매개변수를 평가하려면 Bash eval 명령을 사용하십시오.

쉘 명령은 인수 문자열을 수신하고 해당 문자열을 사용하여 명령을 실행합니다. 그런 다음 eval에 의해 현재 쉘에서 명령이 실행됩니다.

이 명령은 특정 연산자나 예약어를 사용하는 명령을 실행할 때 유용합니다.

통사론:

eval [arguments...]

인수는 이 명령에 전달되고 문자열 리터럴로 결합된 다음 실행을 위해 Bash로 전송됩니다. 이 명령은 명령 실행 후 종료 상태를 반환합니다.

이 명령에 인수가 전달되지 않거나 null이 전달되면 종료 상태로 0을 반환합니다.

예 1: 파일의 단어 수를 계산합니다.

몇 줄의 텍스트가 포함된 mysample.txt 파일이 있다고 가정합니다. 해당 파일의 단어 수를 계산해야 하는 경우 wc -w 명령을 사용할 수 있습니다.

eval 명령을 사용하여 이 작업을 수행합니다. Bash 스크립트는 다음과 같습니다.

#!/bin/bash
wordcount="wc -w mysample.txt"
eval $wordcount

출력을 살펴보겠습니다.

평가 명령 출력

예 2: 여러 변수를 사용하여 명령 작성

Welcome to Eval Command 문구를 인쇄해야 한다고 가정합니다. eval 명령을 사용하여 이를 수행할 수 있습니다.

#!/bin/bash
var1="Welcome to Eval Command"
comm1="echo"

eval $comm2 $var1

이 스크립트에서 두 개의 변수를 생성했습니다. 하나는 인쇄할 메시지를 포함하고 다른 하나는 echo 명령을 포함합니다. 이 두 변수를 eval 명령에 전달하면 그에 따라 전체 명령이 구성됩니다.

이 스크립트를 실행하면 다음과 같은 결과가 표시됩니다.

여러 변수가 있는 eval 명령 출력

예 3: 변수 값을 인쇄합니다.

다음 예제에서는 다른 변수를 포함하는 변수의 값을 인쇄합니다.

#!/bin/bash
str1="my script"
str2= str1
comm="echo "
eval $comm '$str2'

위 스크립트의 출력은 다음과 같습니다.

eval 중첩 변수 출력

예 4: 숫자의 합계를 인쇄합니다.

다음 예제에서는 스크립트의 for 루프를 사용하여 1에서 4까지의 숫자 합계를 인쇄합니다. 그런 다음 eval 명령을 사용하여 해당 합계를 인쇄합니다.

이 문제의 스크립트는 다음과 같습니다.

#!/bin/bash
sum=0
for n in {1..4}
do
sum=$(($sum+$n))
done
comm="echo 'The result of sum from 1-4 is: '"
eval $comm $sum

위 스크립트의 출력은 다음과 같습니다.

숫자의 합 출력

bash-c 플래그와 함께 사용하여 Bash 스크립트의 변수에서 명령 실행

기본적으로 bash 명령 해석기는 표준 입력 또는 파일에서 명령을 읽고 실행합니다. 그러나 -c 플래그가 설정된 경우 bash 인터프리터는 첫 번째 문자열 매개변수에서 명령을 읽습니다(그리고 옵션이 아닌 인수여야 함).

따라서 Bash 문자열 변수에 저장된 명령을 실행하는 데 사용할 수 있습니다.

예를 들어, 다음 스크립트는 먼저 ls 명령 문자열을 COMMAND 변수에 할당합니다. 그런 다음 COMMAND 변수를 입력으로 사용하기 위해 -c 명령과 함께 bash 인터프리터를 사용합니다.

#!/bin/bash
COMMAND="ls"
bash -c $COMMAND

위의 명령은 스크립트 파일의 현재 작업 디렉토리에 있는 모든 디렉토리와 파일을 나열합니다.

명령 대체 $()를 사용하여 Bash 스크립트의 변수에서 명령 실행

명령 대체 방법을 사용하여 변수에 저장된 명령을 다음과 같이 실행할 수 있습니다.

#!/bin/bash
COMMAND="ls"
$(echo $COMMAND)

관련 문장 - Bash Variable