>시스템 튜토리얼 >리눅스 >bash 쉘에서 $()와 ${} 및 $(())와 (())를 구별하는 방법

bash 쉘에서 $()와 ${} 및 $(())와 (())를 구별하는 방법

王林
王林앞으로
2024-02-15 10:40:25991검색

bash shell 中如何区别 $()和${}和$(())和(())

$() 및 ${} 사용법:

bash 쉘에서는 $( ) 및 ` `(백틱)이 명령 대체에 사용됩니다. 그리고 $()는 모든 쉘에서 사용할 수 있습니다. bash2를 사용하면 문제가 없습니다...

${ }를 보세요...실제로 변수 치환에 사용됩니다. 일반적으로 $var와 ${var} 사이에는 차이가 없습니다. 그러나 ${ }를 사용하면 변수 이름의 범위를 더 정확하게 정의할 수 있습니다.

${ }의 일부 특수 기능을 설명하기 위해 몇 가지 예를 사용하겠습니다.

변수를 다음과 같이 정의한다고 가정해 보겠습니다.

파일=/dir1/dir2/dir3/my.file.txt

${ }를 사용하여 각각을 대체하여 다른 값을 얻을 수 있습니다.

${file#*/}: 첫 번째 /와 왼쪽 문자열을 제거합니다: dir1/dir2/dir3/my.file.txt

${file##*/}: 마지막 / 및 왼쪽 문자열 제거: my.file.txt

${file#*.}: 첫 번째 . 및 왼쪽 문자열을 제거합니다: file.txt

${file##*.}: 마지막 . 및 왼쪽 문자열을 제거합니다: txt

${file%/*}: 마지막 /와 오른쪽 문자열을 제거합니다: /dir1/dir2/dir3

${file%%/*}: 첫 번째 /와 오른쪽 문자열을 제거합니다: (null 값)

${file%.*}: 마지막 . 및 오른쪽 문자열을 제거합니다: /dir1/dir2/dir3/my.file

${file%%.*}: 첫 번째 . 및 오른쪽 문자열을 제거합니다: /dir1/dir2/dir3/my

메모리 방법은 다음과 같습니다.

#은 왼쪽을 없애는 것입니다(#은 감정판 $의 왼쪽에 있습니다)

%는 오른쪽을 제거한다는 의미입니다(%는 보드에서 $의 오른쪽에 있습니다)

단일 기호는 최소 일치이고 두 기호는 최대 일치입니다.

${file:0:5}: 가장 왼쪽 5바이트 ​​추출: /dir1

${file:5:5}: 5번째 바이트 오른쪽에 있는 연속 5바이트를 추출합니다: /dir2

변수 값의 문자열을 바꿀 수도 있습니다:

${file/dir/path}: 첫 번째 디렉토리를 path:/

로 바꿉니다.

경로1/dir2/dir3/my.file.txt

${file//dir/path}: 모든 디렉토리를 경로:/

로 바꿉니다.

경로1/경로2/경로3/my.file.txt

${ }를 사용하여 다양한 변수 상태(설정되지 않음, null 값, null이 아닌 값)에 값을 할당합니다.

${file-my.file.txt}: $file이 설정되지 않은 경우 my.file.txt를 반환 값으로 사용합니다. (Null 값과 null이 아닌 값은 처리되지 않습니다)

${file:-my.file.txt}: $file이 설정되지 않았거나 비어 있는 경우 my.file.txt를 반환 값으로 사용합니다. (null이 아닌 값은 처리되지 않습니다)

${file+my.file.txt}: $file이 null 값 또는 null이 아닌 값으로 설정된 경우 my.file.txt가 반환 값으로 사용됩니다. (미설정시 처리가 되지 않습니다)

${file:+my.file.txt}: $file이 비어 있지 않은 값인 경우 my.file.txt를 반환 값으로 사용합니다. (설정이 없거나 값이 비어 있으면 처리가 수행되지 않습니다)

${file=my.file.txt}: $file이 설정되지 않은 경우 my.file.txt를 반환 값으로 사용하고 $file을 my.file.txt에 할당합니다. (Null 값과 null이 아닌 값은 처리되지 않습니다)

${file:=my.file.txt}: $file이 설정되지 않았거나 비어 있는 경우 my.file.txt를 반환 값으로 사용하고 $file을 my.file.txt에 할당합니다. (null이 아닌 값은 처리되지 않습니다)

${file?my.file.txt}: $file이 설정되지 않은 경우 my.file.txt를 STDERR로 출력합니다. (Null 값과 null이 아닌 값은 처리되지 않습니다)

${file:?my.file.txt}: $file이 설정되지 않았거나 비어 있는 경우 my.file.txt를 STDERR로 출력합니다. (null이 아닌 값은 처리되지 않습니다)

위의 이해는 unset, null, non-null의 세 가지 할당 상태를 명확하게 구분해야 한다는 것입니다.

일반적으로 :은 null과 관련이 있습니다. :이 포함되어 있지 않으면 null은 영향을 받지 않습니다. :이 포함되어 있으면 null도 영향을 받습니다.

또한 ${#var}는 변수 값의 길이를 계산할 수 있습니다.

${#file}은 /dir1/dir2/dir3/my.file.txt가 정확히 27바이트이기 때문에 27이 됩니다...

$(()) 목적:

정수 연산에 사용됩니다.

Bash에서 $(( ))의 정수 산술 기호는 대략 다음과 같습니다.

+ - * /: 각각 "덧셈, 뺄셈, 곱셈, 나눗셈".

%: 나머지 연산

& | ^ !: 각각 "AND, OR, XOR, NOT" 연산.

예:

왕nc>a=5;b=7;c=2;

wangnc>echo $a + $b

5 + 7

wangnc>echo $(( a + b*c))

19

wangnc>echo $(((a*b)/c))

17

wangnc>echo $(($a +$b*$c))

19

왕nc>

$(( ))의 변수 이름은 앞에 $ 기호를 추가하여 바꾸거나 다음과 같이 $ 기호 없이 바꿀 수 있습니다.

$(( $a + $b * $c)) 는 19의 결과도 얻을 수 있습니다

또한 $(( ))는 다른 캐리 수(예: 2진수, 8진수, 16진수)를 사용하여 연산을 수행할 수도 있지만 출력 결과는 모두 10진수입니다.

echo $((16#2a)) 결과는 42입니다(16진수에서 10진수)

(()) 목적:

실제로 단순히 (( ))를 사용하여 변수 값을 재정의하거나 테스트를 수행할 수도 있습니다.

a=5; ((a++))는 $a를 6으로 재정의합니다

a=5; ((a--)) 그러면 a=4

a=5; b=7; ((a < b))는 0(참)을 반환합니다.

(( ))에 대한 일반적인 테스트 기호는 다음과 같습니다.

<: 보다 작음 >: 보다 큼

<=: 작거나 같음 >=:

보다 크거나 같음

==:

과 동일

!=:

와 같지 않음

위 내용은 bash 쉘에서 $()와 ${} 및 $(())와 (())를 구별하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 linuxprobe.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제