SLAX 변수 개요
SLAX 변수는 계산하거나 정적으로 정의할 수 있는 모든 값을 저장할 수 있습니다. 여기에는 데이터 구조, XML 계층, 텍스트와 매개 변수의 조합이 포함됩니다. 예를 들어 운영 모드 명령 의 XML 출력을 변수에 할당한 다음 변수 내의 계층 구조에 액세스할 수 있습니다.
지역 변수와 전역 변수를 모두 정의할 수 있습니다. 변수는 템플릿 외부에서 정의된 경우 전역적입니다. 그렇지 않으면 로컬입니다. 전역 변수의 값은 스크립트의 어느 곳에서나 액세스할 수 있습니다. 지역 변수의 범위는 해당 변수가 정의된 템플릿 또는 코드 블록으로 제한됩니다.
SLAX 언어 버전 1.0은 명령문을 사용하여 var
선언되는 불변 변수를 지원합니다. Junos OS 릴리스 12.2부터 지원되는 SLAX 언어 버전 1.1에는 명령문을 사용하여 mvar
선언되는 변경 가능한 변수가 도입되었습니다. 변경 가능한 변수와 변경할 수 없는 변수는 다음 섹션에서 설명합니다.
불변 변수
SLAX 언어 버전 1.0에서는 명령문을 사용하여 변수를 선언합니다 var
. 문을 사용하여 선언된 var
변수는 변경할 수 없습니다. 불변 변수의 값은 선언할 때만 설정할 수 있으며, 그 이후에는 값이 고정됩니다.
선언에서 변수 이름 앞에는 달러 기호($)가 붙는데, 이는 달러 기호가 요소의 특성 <xsl:variable>
값 name
앞에 접두사를 붙이지 않는 XSLT 선언과 다릅니다. 변수를 선언한 후에는 달러 기호($) 접두사가 붙은 변수 이름을 사용하여 XPath 표현식 내에서 변수를 참조할 수 있습니다. 등호(=)와 표현식을 사용하여 변수 이름 뒤에 변수를 초기화합니다.
다음 예제에서는 변수를 location
선언하고 초기화한 다음 변수를 message
초기화하는 데 사용합니다.
var $location = $dot/@location; var $message = "We are in " _ $location _ " now.";
XSLT에 해당하는 것은 다음과 같습니다.
<xsl:variable name="location" select="$dot/@location"/> <xsl:variable name="message" select="concat('We are in ', $location, ' now.')"/>
문을 사용하여 선언된 var
변수는 변경할 수 없습니다. 따라서 선언에서 초기화된 후에는 변수의 값을 변경할 수 없습니다. 변수 값을 직접 업데이트할 수는 없지만 함수를 재귀적으로 호출하고 변수 값을 매개 변수로 전달하여 효과를 모방할 수 있습니다. 예를 들어:
var $count = 1; match / { call update-count($myparam = $count); } template update-count($myparam) { expr $count _ ", " $myparam _"\n"; if ($myparam != 4) { call update-count($myparam = $myparam + 1) } }
CLI에서 op 스크립트를 실행하면 로그 파일에 다음과 같은 출력이 생성됩니다. 변수는 고정된 myparam
상태로 유지되어야 하지만 템플릿이 count
호출될 때마다 업데이트됩니다.
1, 1 1, 2 1, 3 1, 4 1, 5
변경 가능한 변수
Junos OS 릴리스 12.2 이상에서 지원되는 SLAX 언어 버전 1.1에는 변경 가능한 변수가 도입되었습니다. 명령문을 사용하여 선언된 var
변수와 달리 변경 가능한 변수의 값은 스크립트로 수정할 수 있습니다. 변경 가능한 변수의 초기 값은 선언할 때 또는 스크립트의 어느 지점에서나 설정할 수 있습니다.
문을 사용하여 변경 가능한 변수를 선언합니다 mvar
. 선언에서 변수 이름 앞에는 달러 기호($)가 붙습니다. 변경 가능한 변수를 선언한 후에는 달러 기호($)가 붙은 변수 이름을 사용하여 XPath 표현식 내에서 이를 참조할 수 있습니다. 변수 이름 뒤에 등호(=)와 표현식을 사용하여 변수를 초기화합니다.
다음 예제에서는 변경 가능한 변수를 location
선언하고 초기화한 다음 변경 가능한 변수를 message
초기화하는 데 사용됩니다.
mvar $location = $dot/@location; mvar $message = "We are in " _ $location _ " now.";
변경 가능한 변수는 선언된 후 초기화하거나 업데이트할 수 있습니다. 변경 가능한 변수의 값을 초기화하거나 업데이트하려면 문을 사용합니다 set
. 다음 예제에서는 변수를 block
선언하고 요소를 <block>
사용하여 초기화합니다.
mvar $block; set $block = <block> "start here";
노드 집합을 나타내는 변경 가능한 변수의 경우 문을 사용하여 append
기존 노드 집합에 새 노드를 추가합니다. 다음 예제에서는 하나의 <item>
요소로 초기화되는 변경 가능한 변수를 $mylist
만듭니다. 변수의 각 식료품 품목 $list
에 대해 스크립트는 품목의 이름과 크기로 노드 집합에 요소를 $mylist
추가합니다<item>
.
version 1.1; var $list := { <list> { <grocery> { <name> "milk"; <type> "nonfat"; <brand> "any"; <size> "gallon"; } <grocery> { <name> "orange juice"; <type> "no pulp"; <brand> "any"; <size> "half gallon"; } <drugstore>{ <name> "aspirin"; <brand> "any"; <size> "50 tablets"; } } } match / { mvar $mylist; set $mylist = <item> { <name> "coffee"; <size> "1 lb"; } for $item ($list/list/grocery) { append $mylist += <item> { <name> $item/name; <size> $item/size; } } <grocery-short-list> { copy-of $mylist; } }
스크립트의 출력은 다음과 같습니다.
<?xml version="1.0"?> <grocery-short-list> <item> <name>coffee</name> <size>1 lb</size> </item> <item> <name>milk</name> <size>gallon</size> </item> <item> <name>orange juice</name> <size>half gallon</size> </item> </grocery-short-list>