📅  最后修改于: 2023-12-03 15:05:45.722000             🧑  作者: Mango
在Unix/Linux系统上,有许多特殊的变量,它们可以为程序员提供很多方便。本文将介绍其中一些常用的特殊变量。
$0
变量包含当前正在运行的脚本或命令的名称。例如,如果我们运行一个名为 script.sh
的脚本,那么 script.sh
就是 $0
的值。
#!/bin/bash
echo "The name of this script is: $0"
输出:
The name of this script is: script.sh
$#
变量用于获取命令行参数的数量。例如,如果我们运行 ./script.sh arg1 arg2 arg3
,那么 $#
的值将是 3
。
#!/bin/bash
echo "The number of command-line arguments is: $#"
输出:
The number of command-line arguments is: 3
$1
, $2
, $3
... 变量用于获取命令行参数的值。例如,如果我们运行 ./script.sh arg1 arg2 arg3
,那么 $1
的值将是 arg1
,$2
的值将是 arg2
,以此类推。
#!/bin/bash
echo "The first argument is: $1"
echo "The second argument is: $2"
echo "The third argument is: $3"
输出:
The first argument is: arg1
The second argument is: arg2
The third argument is: arg3
$?
变量用于获取上一条命令的退出状态。如果命令执行成功,则 $?
的值将是 0
,否则将是一个非零值。
#!/bin/bash
ls
echo "The exit status of the ls command is: $?"
rm file_that_does_not_exist
echo "The exit status of the rm command is: $?"
输出:
Desktop Documents Downloads Music Pictures Public Templates Videos
The exit status of the ls command is: 0
rm: cannot remove 'file_that_does_not_exist': No such file or directory
The exit status of the rm command is: 1
$$
变量包含当前进程的进程号。
#!/bin/bash
echo "The process ID of this script is: $$"
输出:
The process ID of this script is: 1234
$!
变量包含最后一个后台作业的进程号。
#!/bin/bash
sleep 10 &
echo "The process ID of the sleep command is: $!"
输出:
The process ID of the sleep command is: 1234
$@
变量用于将所有命令行参数作为一个单词列表传递给脚本。这个变量将把每个参数看作一个单独的单词,用空格分隔。
#!/bin/bash
for var in "$@"
do
echo "$var"
done
输出:
arg1
arg2
arg3
$*
变量与 $@
类似,也用于将命令行参数作为一个单词列表传递给脚本,不过它将所有参数看作一个单词,用第一个 IFS
变量的值分隔。默认情况下,IFS
是一个空格。
#!/bin/bash
for var in "$*"
do
echo "$var"
done
输出:
arg1 arg2 arg3
这里我们总结了 Unix/Linux 系统上的一些常用的特殊变量。程序员们可以利用这些变量,使其脚本和程序更加清晰、简洁。