shell特殊位置变量的问题小结
目录
- 1.特殊位置变量 $n
- 2.特殊位置变量 $0
- 3.特殊位置变量$ #
- 4.特殊位置变量$*/$@
- 5.shift 命令
1.特殊位置变量 $n
$n
:表示传递给脚本或函数的第n
个参数。$1
:第一个参数$2
:第二个参数- ...
$9
:第九个参数- 超过 9 个参数时,需要用
{}
,例如${10}
表示第十个参数。
2.特殊位置变量 编程客栈$0
$0
:表示脚本的文件名或当前命令的名称或者脚本路径
#!/bin/bash echo "脚本名是:$0" #bash myscript.sh #脚本名是:myscript.sh
$0获取脚本路径
#!/bin/bash # 使用 dirname 提取脚本目录 script_dir=$(dirname "$0") # 输出脚本目录 echo "编程客栈脚本目录是:$script_dir"
dirname $0 的作用:
- 提取 $0 表示的脚本路径中的目录部分。
- 当使用相对路径调用脚本时,
dirname $0
的结果也是相对路径 - 相对路径:如果你通过相对路径调用脚本,比如
./script.sh
,那么dirname "$0"
会返回.
,表示当前目录。 - 绝对路径:如果通过绝对路径调用脚本,
dirname "$0"
会返回脚本所在的绝对目录。
basename $0作用:
- 提取路径中的文件名部分。
- 从
$0
的值中移除路径部分,只返回文件名。
#!/bin/bash # 获取脚本的完整路径 #script_path=$(readlink -f "$0") # 提取目录和名称 script_dir=$(dirname "$0") script_name=$(basename "$0") echo "脚本目录是:$script_dir" echo "脚本名称是:$script_name"
3.特殊位置变量$ #
$#
表示传递给脚本的参数数量,即位置参数的个数。
#!/bin/bash echo "传递给脚本的参数个数是:$#" #bash script.sh 1 2 3 #传递给脚本的参数个数是:3 #bash script.sh "1 2" 3 #传递给脚本的参数个数是:2 #bash script.sh {a..z} #传递给脚本的参数个数是:26
4.特殊位置变量$*/$@
$*
:将所有参数视为一个单一的字符串。$@
:将每个参数视为独立的字符串,特别是当参数包含空格时,区别更加明显。
4.1 $*
$*
将所有传递给脚本的参数视为一个单一的字符串,并且各个参数之间会用空格分隔。- 没有双引号时,
$*
会将所有参数当作一个单一的字符串处理,但它会按照空格拆分参数
#!/bin/bash echo "使用 \$* 时:" for i in $*; do echo "[$i]" done bash test.sh "Hello world" arg2 "this is" arg4 $* 会将所有参数当作一个单一的字符串处理,但它会按照空格拆分参数。因此,"Hello world" 被拆成了 Hello 和 world,"this is" 被拆成了 this 和 is。 使用 $* 时: [Hello] [world] [arg2] [this] [is] [arg4]
加上双引号时,"$*"
会把所有的参数当成一个整体,但依然会将参数之间用一个空格隔开。
#!/bin/bash echo "使用 \"\$*\" 时:" for i in android"$*"; do echo "[$i]" done 使用 "$*" 时: [Hello world arg2 this is arg4] 当加上双引号时,"$*" 将所有参数当作一个完整的单一字符串来处理,并用空格分隔。这样,整个输入变成了一个大字符串 Hello world arg2 this is arg4。
4.2 $@
$@
也表示所有传递给脚本的参数,但它会将每个参数作为一个独立的字符串,尤其是当参数包含空格时,会将每个参数保留为单独的字符串。
没有双引号时,$@
会和 $*
相似地将每个参数当作一个独立的部分,参数之间也会用空格分隔。与$*不加双引号行为相同
#!/bhttp://www.devze.comin/bash echo "使用 \$@ 时:" for i in $@; do echo "[$i]" done #输出 使用 $@ 时: [Hello] [world] [arg2] [this] [is] [arg4]
加上双引号时,"$@"
会让每个参数保持独立,即使参数中有空格,也不会被拆开。
#!/bin/bash echo "使用 \"\$@\" 时:" for i in "$@"; do echo "[$i]" done 使用 "$@" 时: [Hello world] [arg2] [this is] [arg4] 当加上双引号时,"$@" 编程客栈会保留每个参数作为独立的字符串。即使参数中包含空格(如 "Hello world"),它也会将整个 "Hello world" 作为一个参数处理,不会拆分。每个参数都保持独立性。
5.shift 命令
shift
用来将位置参数向左移动,参数的数量会减少,原来的 $1
会被移除,新的 $2
变成 $1
,依此类推。
#!/bin/bash # 打印所有传递的参数 echo "原始参数:$@" # 移动参数 shift # 打印移位后的参数 echo "移位后的参数:$@"
可以使用 shift
多次,以进一步移动参数:
#!/bin/bash shift 2 echo "移位两次后的参数:$@" bash script.sh arg1 arg2 arg3 arg4
到此这篇关于shell特殊位置变量的文章就介绍到这了,更多相关shell特殊位置变量内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!
精彩评论