Linux笔记之bash脚本中的$符号
code review!
文章目录
- [Linux笔记之bash脚本中的符号](#Linux笔记之bash脚本中的符号)
-
- [符号和大括号{}结合使用](#符号和大括号{}结合使用)
在 Bash 脚本中,`$` 符号被用于许多不同的上下文中,主要用于访问变量的值、参数扩展、算术运算以及命令替换等:
-
访问变量的值
当你在变量名前面加上
$
符号时,它会被替换成该变量的值。bashname="world" echo "Hello, $name"
输出将会是
Hello, world
。 -
位置参数
$0
代表脚本的名字,$1
到$9
代表第一到第九个参数,$#
代表参数的个数。bashecho "Script name: $0" echo "First argument: $1" echo "Number of arguments: $#"
-
特殊参数
$*
和$@
都代表所有的位置参数,但是在引号中有所不同。"$*"
将所有的位置参数当作一个单一的字符串。"$@"
会将每个参数当作独立的带引号的字符串。
-
退出状态
$?
代表上一个命令的退出状态(返回值)。0 通常意味着成功,其他值意味着有错误或问题。bashgrep "text" file.txt if [ $? -eq 0 ]; then echo "Text found." else echo "Text not found." fi
-
算术扩展
$((expression))
用于算术运算。bashnum1=5 num2=3 sum=$((num1 + num2)) echo $sum # 输出 8
-
命令替换
$(command)
用于命令替换,它执行命令并将输出用作其他命令或变量的值。bashfiles=$(ls) echo "Files in directory: $files"
-
双引号中的变量扩展
当你在双引号中使用变量时,变量会扩展成它的值。单引号则不会进行扩展。
bashgreeting="hello" echo "$greeting world" echo '$greeting world'
第一个
echo
命令会输出hello world
,而第二个则会输出字面上的$greeting world
。
$符号和大括号{}结合使用
在 Bash 脚本中,$
符号可以与大括号 {}
结合使用,这种结合使用有几个好处和用途:
-
变量扩展
大括号用于明确变量的边界。这在变量名可能与紧跟其后的字符混淆时非常有用。
bashgreeting="world" echo "Hello, ${greeting}ly" # 会输出 Hello, worldly
如果没有大括号,Bash 会尝试查找名为
greetingly
的变量,这很可能不是你想要的。 -
字符串操作
大括号还可以用于对变量进行各种字符串操作,如提取子字符串、查找和替换等。
-
子字符串提取:
bashstr="abcdefghijk" echo "${str:3:4}" # 从索引3开始提取长度为4的子字符串,输出 "defg"
-
默认值:
bashecho "${unset_var:-default_value}" # 如果变量 unset_var 没有设置,输出 "default_value"
-
替换:
bashfilepath="/path/to/your/file" echo "${filepath/to/from}" # 替换第一个匹配的 "to",输出 "/path/from/your/file" echo "${filepath//to/from}" # 替换所有匹配的 "to",输出 "/path/from/your/file"
-
-
数组操作
大括号也用于访问数组元素和执行数组操作。
basharray=(one two three) echo "${array[1]}" # 输出 "two"
-
参数扩展的高级用法
大括号提供了许多高级参数扩展的选项,例如字符串长度、模式匹配等。
-
字符串长度:
bashmystring="hello world" echo "${#mystring}" # 输出字符串长度 "11"
-
模式删除:
bashfilename="myfile.txt" echo "${filename%.*}" # 删除最短匹配 . 及其后面的内容,输出 "myfile" echo "${filename%%.*}" # 删除最长匹配 . 及其后面的内容,输出 "myfile"
-
大括号的使用增加了代码的可读性和灵活性,可以帮助你更精确地控制变量的行为和输出。