Linux Shell 스크립트에는 다양한 의미와 반환 값을 나타내는 일부 특수 매개변수가 미리 정의되어 있습니다. 아래에 하나씩 요약되어 있습니다.
1. [$0]: 스크립트 이름
$0
返回当前执行的shell
脚本的名称。
2.【1-9】:命令行参数1到9
$1-$9
这9个分别代表脚本执行命令第一个参数、第二个参数、第三个参数……第9个参数。
例如,假设我们有一个名为 test.sh
的Shell脚本,它的内容如下:
#!/bin/bash echo "Script name: $0" echo "First argument: $1" echo "Second argument: $2"
在运行脚本时,我们可以给它传递两个参数,比如:
./test.sh hello world
这时候脚本会输出:
Script name: test.sh First argument: hello Second argument: world
说明 代表脚本名,1 代表第一个参数,$2代表第二个参数。
3.【 $#】:参数个数
它表示所有参数的个数。
#!/bin/bash echo "Number of arguments: $#"
运行脚本 ./test.sh hello world
,输出 Number of arguments: 2
4. 【$*】:所有参数
$*
表示所有参数。
#!/bin/bash echo "All arguments: $*"
运行脚本 ./test.sh hello world
,输出 All arguments: hello world
5. 【$@】:所有参数
$@
也表示所有参数:
#!/bin/bash echo "All arguments: $@"
运行脚本 ./test.sh hello world
,输出 All arguments: hello world
上面$*和$@
都是用来获取所有脚本参数的特殊变量。它们之间的区别在于,如何将参数作为单个字符串或多个独立字符串进行处理。
-
$*
会把所有的参数解释成一个单词(单个字符串),即每个参数之间不会加上空格,全部组合成一个字符串,用IFS
(默认是空格)分隔。所以,将*
放在双引号里,预处理$
符号,保持长字符串的完整性:
#!/bin/bash echo "Using $*:" for arg in "$*"; do echo $arg done
-
$@
会把所有的参数看成是独立的单词(多个独立的字符串),即每个参数之间加上空格,将每个参数作为一个独立的字符串处理。
#!/bin/bash echo "Using $@:" for arg in "$@"; do echo $arg done
下面我们可以通过一个示例来理解两者的区别。假设我们有一个shell
脚本,名为 test.sh
并拥有以下内容:
#!/bin/bash echo "Using $*:" for arg in "$*"; do echo $arg done echo "Using $@:" for arg in "$@"; do echo $arg done
然后,在终端上执行以下命令:
$ ./test.sh one two three
当我们执行脚本时,输出如下所示:
Using $*: one two three Using $@: one two three
我们可以看到,使用∗
时,所有参数都解释为单个字符串,由空格分隔。
而使用@
时,每个参数都被解释为一个单独的字符串,并独立处理。
在大多数情况下,使用$@
是更加灵活和安全的选项,因为它可以独立处理每个参数,而不会将它们合并为单个字符串。
6. 【$?】:上一个命令的退出状态码
#!/bin/bash ls / echo "Exit status code: $?"
由于ls /
应该会执行成功,因此运行脚本后输出 Exit status code: 0
,表示上一个命令执行成功。
7. 【$$】:当前进程ID号
$$
是一个特殊的变量,用于获取当前正在运行的Shell
脚本的进程ID(PID)
。
这个变量对于在Shell
脚本中跟踪和识别进程非常有用,或者将PID
用于生成唯一的临时文件名。
以下是一个简单的示例脚本,它使用$$
变量来创建一个唯一的临时文件名:
#!/bin/bash tempfile=/tmp/myprog.$$ echo "Program is running with PID $$." echo "Temp filename is $tempfile." #rest of the script goes here...
在上述示例中,我们使用了$$
变量来创建一个唯一的文件名,将其存储在$tempfile
变量中,并在控制台输出当前脚本运行的进程ID
。这个唯一的文件名将被用于存储程序输出或其他的过程。
使用$$
变量时,需要注意它只能获取当前Shell
脚本的PID
而不能获取任何子进程或后台任务的PID
。
8. 【$!】:最近一次在后台运行的进程的PID号
在Linux Shell脚本中,!是一个特殊变量,用于获取最近一次在后台运行的进程的PID
号(进程ID
号)。
!
通常用于在脚本中启动后台进程,并且需要获取后台进程的PID
号。
以下是一个示例脚本 test.sh
,它使用&
运算符来将程序启动到后台运行,并使用$!变量获取需要的PID
号:
#!/bin/bash echo "Starting background process..." sleep 5 & background_pid=$! echo "The background process PID is: $background_pid"
上述脚本中的sleep
命令会在后台执行5秒钟,并执行$!
将其PID号赋值给变量background_pid
。
最后,脚本会输出后台进程的PID
号。
执行该脚本的命令是:./test.sh
,其输出如下:
Starting background process... The background process PID is: 12345
其中,12345
应该是实际执行中sleep
进程的PID号,其值随机。
9. 【$-】:获取当前Shell的选项标志
$-
是一个特殊变量,用于获取当前Shell的选项标志(Option Flags
)。选项标志是Shell
用来控制其行为的一些特殊设置。
$-
可以用来获取当前Shell
所使用的选项标志,通常应用于Shell
脚本的调试中,可以帮助我们诊断问题。
以下是一个示例脚本 test.sh
,它使用$-变量获取当前Shell的选项标志及其含义:
#!/bin/bash echo "Value of $-: $-"
上述脚本中,echo
命令会输出当前Shell
的选项标志。
执行该脚本的命令是:./test.sh
,其输出如下:
Value of $-: himBH
上述输出中,选项标志中包含了5个
字符,分别表示以下内容:
-
h
:bash shell
启用hash
命令时将完成命令名和缓存条目之间的HASH
值打印到标准错误输出中; -
i
:交互模式运行,即标准输入与终端相连; -
m
:启用作业控制功能; -
B
:启用Brace Expansion
(花括号扩展)机制; -
H
:Shell
扩展历史记录功能,寻找法:$HOME/.bash_history
,如果该文件不存在则新建一个。
10. 【$IFS】:指定Shell脚本中的字段分隔符
$IFS
是一个特殊变量,用于指定Shell
脚本中的字段分隔符。字段分隔符是将一行输入或输出按照不同的字段拆分开来并存储在不同的变量中的标记。
默认情况下,$IFS
的值为空格,制表符和换行符。但是,我们可以将其设置为其他的分隔符来满足特定的需求。
以下是一个示例脚本 test.sh
,它使用$IFS变量来指定不同的分隔符,将一行输入按照分隔符分成不同的变量:
#!/bin/bash echo "Enter a line of values separated by commas (','):" read line echo "Default IFS values: '$IFS'" IFS="," echo "Custom IFS value set to: '$IFS'" echo "Values entered:" for value in $line do echo "$value" done
上述脚本中,通过read
命令读取一行输入,并通过将$IFS设置为逗号来将输入行分隔成不同的变量。最后,使用for
循环按顺序输出不同的变量。
执行该脚本的命令是:./test.sh
,它会提示用户输入一个以逗号分隔的值列表。然后,它将逗号设置为分隔符并按顺序输出每个值。下面是一些示例输入和输出:
输入:
a,b,c,d,e
输出:
Default IFS values: 'n' Custom IFS value set to: ',' Values entered: a b c d e
在上述输出中,$IFS
的初始值为默认值(空格、制表符、换行符),该输入字符串以逗号分隔,然后按逗号分隔的方式打印每个值。
这是一个非常有用的用法,可以将一行以逗号或其他字符分隔的值按分隔符分成不同的变量,进一步处理这些变量值。
关于shell
中这10个
特殊变量,总结如下:
위 내용은 Linux 쉘 스크립트에서 특수 문자의 의미는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

일부 Windows 11/10 사용자는 BitDefender 업데이트 직후 CMD 창이 열리고 SecureBootencodeuefi.exe를 실행하고 있다고보고합니다. Php.cn 의이 게시물은 Securebootencodeuefi.exe Trojan을 제거하는 방법을 소개합니다.

sysdll_win64_retail.dll은 FIFA 17 응용 프로그램과 관련된 동적 링크 라이브러리 (DLL) 파일입니다. 해당 파일이 놓치거나 손상되면 해당 응용 프로그램에 대한 일련의 문제와 오류가 발생합니다. 이 문제를 해결하려면이 기사를 읽을 수 있습니다

많은 Surfacebook 사용자는 Windows 11/10에서 "EW_USBCCGPFILTER.SYS에 의해 차단 된 핵심 분리"를 충족한다고보고합니다. Php.cn 의이 게시물은 성가신 문제를 해결하는 데 도움이됩니다. 당신의 독서를 계속하십시오.

컴퓨터에서 Ctrl Alt del을 누르면 잠금, 스위치 및 가입 옵션을 볼 수있는 보안 옵션 창이 입력됩니다. 이러한 옵션이 변경 될 수 있다는 것을 알고 있습니까? 이 php.cn 게시물은 opt를 제거하는 방법을 보여줍니다.

일부 Windows 11/10 사용자는 Windows Defender가 Virus : Win32/Grenam.va! MSR이라는 바이러스를 발견했다고보고합니다. 그러나 그들은 그것을 제거하는 방법을 모릅니다. Php.cn 의이 게시물은 바이러스를 제거하는 방법을 알려줍니다 : Win32/Grenam.va! MSR.

웹 사이트를 자주 방문 해야하는 경우 브라우저를 열고 매번 검색하는 것이 매우 번거 롭습니다. 웹 사이트를 앱으로 저장하려고하는 이유는 무엇입니까? 이렇게하면 일반 소프트웨어로 열 수 있습니다. 여기에서 Php.cn은 일부 usefu를 제공합니다

일부 사람들은 최신 Windows 업데이트를 설치했을 때 Windows 11에서 오류 코드 0x00000000을 만났습니다. 이 예기치 않은 오류에 대처하려면 어떻게해야합니까? Php.cn 웹 사이트 의이 기사는 문제 해결에 대한 몇 가지 단서를 제공합니다.

팀이나 Excel에서 파일을 열 때 "이 앱에서 지원되지 않은 Filetype이 선택한 Filetype"오류 메시지로 고통 받고 있습니까? 이제이 문제에 대한 유용한 솔루션을 얻으려면 PHP.CN 에서이 게시물을 읽으십시오.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기
