Home  >  Article  >  System Tutorial  >  How to distinguish between $() and ${} and $(()) and (()) in bash shell

How to distinguish between $() and ${} and $(()) and (()) in bash shell

王林
王林forward
2024-02-15 10:40:25932browse

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

Usage of $() and ${}:

In the bash shell, $( ) and ` ` (backticks) are used for command substitution. And $() can be used in every shell. If you use bash2, there will be no problem...

Look at ${ }... It is actually used for variable substitution. In general, there is no difference between $var and ${var}. But using ${ } will more accurately define the scope of the variable name.

Here I will use some examples to illustrate some of the special functions of ${ }:

Suppose we define a variable as:

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

We can use ${ } to replace each other to obtain different values:

${file#*/}: Remove the first / and the string to the left: dir1/dir2/dir3/my.file.txt

${file##*/}: Remove the last / and the string to the left: my.file.txt

${file#*.}: Remove the first . and the string to the left: file.txt

${file##*.}: Remove the last . and the string to the left: txt

${file%/*}: Remove the last / and the string to the right: /dir1/dir2/dir3

${file%%/*}: Remove the first / and the string to the right: (null value)

${file%.*}: Remove the last . and the string to the right: /dir1/dir2/dir3/my.file

${file%%.*}: Remove the first . and the string to the right: /dir1/dir2/dir3/my

The memory method is:

# is to remove the left side (# is to the left of $ on the appraisal plate)

% means removing the right side (% is to the right of $ on the disk)

A single symbol is the minimum match; two symbols is the maximum match.

${file:0:5}: Extract the leftmost 5 bytes: /dir1

${file:5:5}: Extract 5 consecutive bytes to the right of the 5th byte: /dir2

We can also replace the string in the variable value:

${file/dir/path}: Replace the first dir with path:/

path1/dir2/dir3/my.file.txt

${file//dir/path}: Replace all dirs with path:/

path1/path2/path3/my.file.txt

Using ${ } can also assign values ​​to different variable states (unset, null value, non-null value):

${file-my.file.txt}: If $file is not set, use my.file.txt as the return value. (Null and non-null values ​​will not be processed)

${file:-my.file.txt}: If $file is not set or is empty, use my.file.txt as the return value. (Non-null values ​​will not be processed)

${file my.file.txt}: If $file is set to a null value or a non-null value, my.file.txt will be used as the return value. (No processing will be performed if not set)

${file: my.file.txt}: If $file is a non-empty value, use my.file.txt as the return value. (No processing will be performed if there is no setting or empty value)

${file=my.file.txt}: If $file is not set, use my.file.txt as the return value, and assign $file to my.file.txt. (Null and non-null values ​​will not be processed)

${file:=my.file.txt}: If $file is not set or is empty, use my.file.txt as the return value, and assign $file to my.file.txt. (Non-null values ​​will not be processed)

${file?my.file.txt}: If $file is not set, output my.file.txt to STDERR. (Null and non-null values ​​will not be processed)

${file:?my.file.txt}: If $file is not set or is empty, output my.file.txt to STDERR. (Non-null values ​​will not be processed)

The above understanding is that you must clearly distinguish the three assignment states of unset, null and non-null.

Generally speaking, : is related to null. If it does not contain :, null will not be affected. If it contains :, even null will be affected.

Also, ${#var} can calculate the length of the variable value:

${#file} can get 27 because /dir1/dir2/dir3/my.file.txt is exactly 27 bytes...

$(()) Purpose:

It is used for integer operations.

In bash, the integer arithmetic symbols of $(( )) are roughly as follows:

- * /: "Addition, subtraction, multiplication, division" respectively.

%: Remainder operation

& | ^ !: "AND, OR, XOR, NOT" operations respectively.

Example:

wangnc>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

wangnc>

The variable name in $(( )) can be replaced by adding a $ symbol in front of it, or without it, such as:

$(( $a $b * $c)) can also get the result of 19

In addition, $(( )) can also perform operations with different carry numbers (such as binary, octal, and hexadecimal). However, the output results are all decimal:

echo $((16#2a)) The result is 42 (hexadecimal to decimal)

(())the use of:

In fact, simply using (( )) can also redefine variable values, or do testing:

a=5; ((a )) $a can be redefined as 6

a=5; ((a--)) then a=4

a=5; b=7; ((a < b)) will return 0 (true).

Common test symbols used for (( )) are as follows:

<: less than >: greater than

<=: less than or equal to >=: greater than or equal to

==: equal to

!=: Not equal to

The above is the detailed content of How to distinguish between $() and ${} and $(()) and (()) in bash shell. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:linuxprobe.com. If there is any infringement, please contact admin@php.cn delete