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 중국어 웹사이트의 기타 관련 기사를 참조하세요!