Linux에서 eval 명령을 사용하는 방법에 대한 자세한 설명
eval 명령은 먼저 C 언어의 매크로 대체와 유사하게 명령줄에서 모든 대체를 검색한 다음 명령을 실행합니다. 이 명령은 한 번의 스캔으로 기능을 수행할 수 없는 변수에 사용됩니다. 이 명령은 변수를 두 번 스캔합니다. 두 번의 스캔이 필요한 이러한 변수를 복소 변수라고도 합니다.
새 파일 테스트를 만들고, 파일에 "HelloWorld!" 문자열을 쓰고, WORD 변수에 cat test를 할당하면 테스트에서 내용을 가져올 수 없습니다. eval 명령은 다음 명령을 두 번 스캔하기 때문에 처음에는 WORD를 cat test로 바꾸고 두 번째에는 cat test를 실행합니다.
2.eval은 복잡한 변수가 아닌 간단한 변수를 다시 작성하는 데에도 사용할 수 있습니다.
NAME=ZONE
eval echo $NAME은 echo $NAME
3과 동일합니다. eval 명령은 쉘에 전달된 마지막 매개변수를 가져올 수도 있습니다
매개변수, 마지막 매개변수의 내용을 보려면 echo를 사용하여 직접 표시할 수 있습니다. 첫 번째와 마지막 두 매개변수를 입력하면 echo $2를 사용하여 마지막 매개변수를 볼 수 있습니다.
但是,如果我们不知道参数个数还想查看最后一个参数内容该怎么办呢?这是我们就想到使用 $$#为传给shell脚本的参数个数,但是上例中 echo “$$#”后显示的其实是参数个数,而使用eval echo “$$#”才显示最后一个参数的内容。
对上述第3点补充: 今天学习eval命令时,发现了这个问题: echo "Last argument is $(eval echo \$$#)" a b c d e 这句话本意打印:Last argument is e 但实际打印的是:Last argument is -bash a b c d e $#一般用在脚本中的,用在命令行的话就要先使用set设置位置参数,因此修改为如下: set - a b c d e echo "Last argument is $(eval echo \$$#)" Last argument is e set - a b c d e f echo "Last argument is $(eval echo $#)" Last argument is 6
4、条件筛选
在file文件中写入两列数据,第一列对应KEY 、第二列为VALUE,使用eval命令将KEY与VALUE的值对应起来,从文件中读取
eval进阶:
1.shell 也提供了 eval 命令,如同熟悉的其他脚本语言,会将它的参数做为命令执行,初看会疑惑为什么shell要提供两种动态执行命令字串的机制,但是经过仔细分析,才发现shell的eval同其他语言有很大区别。
2.shell 中的 eval
2.1 不能获得函数处理结果 ,如1所说,所有命令,函数的处理结果只能通过 ``来获得,那么其它语言中利用eval来获得动态生成代码执行后的输出变得不可能。
2.2 eval 嵌套无意义 ,在其他语言中可以通过 eval(eval("code")),来执行(执行动态生成的code的返回),而由于shell 中 eval 将后面的eval命令简单当作命令字符串执行,失去了嵌套作用,嵌套被命令替换取代。
eval的作用是再次执行命令行处理,也就是说,对一个命令行,执行两次命令行处理。这个命令要用好,就要费一定的功夫。我举两个例子,抛砖引玉.
例子1:用eval技巧实现shell的控制结构for
[root@home root]# cat myscript1 QUOTE: #!/bin/sh evalit(){ if [ $cnt = 1 ];then eval $@ return else let cnt="cnt-1" evalit $@ fi eval $@ } cnt=$1 echo $cnt | egrep "^[1-9][0-9]*$" >/dev/null if [ $? -eq 0 ]; then shift evalit $@ else echo 'ERROR!!! Check your input!' fi [root@home root]# ./myscript1 3 hostname home home home [root@home root]# ./myscript1 5 id |cut -f1 -d' ' uid=0(root) uid=0(root) uid=0(root) uid=0(root) uid=0(root) 注意:bash里有两个很特殊的变量,它们保存了参数列表。 $*,保存了以$IFS指定的分割符所分割的字符串组。 $@,原样保存了参数列表,也就是"$1""$2"...
这里我使用了函数递归以及eval实现了for结构。
当执行eval $@时,它经历了步骤如下:
第1步,分割成eval $@
第6步,扩展$@为hostname
第11步,找到内置命令eval
重复一次命令行处理,第11步,找到hostname命令,执行。
注意:也许有人想当然地认为,何必用eval呢?直接$@来执行命令就可以了嘛。
例子2:一个典型错误的例子
명령줄이 복잡한 경우(파이프 또는 기타 문자 포함) $a 문자열의 내용을 직접 실행하면 오류가 발생합니다. 분석은 다음과 같습니다.
$a는 매개변수 확장에서 처리됩니다. 즉, 파이프라인 분석을 건너뛰므로 "|", "cut", "-f1", "-d"는 모두 id 명령의 매개변수가 됩니다 , 물론 문제가 발생했습니다.
하지만 첫 번째 명령줄 처리에서 얻은 "id", "|", "cut", "-f1", "-d" 문자열을 다시 처리하는 eval을 사용하면 이번에는 파이프라인을 올바르게 분석할 수 있습니다. .
요약: 명령줄을 통해 명령이나 스크립트 디자인이 올바르게 처리될 수 있는지 확인하세요. 단계를 건너뛰면 예기치 않은 오류가 발생할 수 있습니다.
관련 추천:
JavaScript에서 eval 사용에 대한 자세한 설명
JavaScript의 eval() 함수 반환 값에 대한 자세한 설명 및 가변 환경 사용 예
JavaScript가 eval() 함수를 사용하여 JavaScript 문자열 인스턴스를 계산하는 방법에 대한 자세한 설명
위 내용은 Linux에서 eval 명령을 사용하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









DeepSeek은 웹 버전과 공식 웹 사이트의 두 가지 액세스 방법을 제공하는 강력한 지능형 검색 및 분석 도구입니다. 웹 버전은 편리하고 효율적이며 설치없이 사용할 수 있습니다. 개인이든 회사 사용자이든, DeepSeek를 통해 대규모 데이터를 쉽게 얻고 분석하여 업무 효율성을 향상시키고 의사 결정을 지원하며 혁신을 촉진 할 수 있습니다.

Docker 컨테이너를 사용하여 사전 컴파일 된 패키지 (Windows 사용자의 경우)를 사용하여 소스 (숙련 된 개발자)를 컴파일하는 것을 포함하여 DeepSeek를 설치하는 방법에는 여러 가지가 있습니다. 공식 문서는 신중하게 문서를 작성하고 불필요한 문제를 피하기 위해 완전히 준비합니다.

Linux 터미널에서 Python 버전을 보려고 할 때 Linux 터미널에서 Python 버전을 볼 때 권한 문제에 대한 솔루션 ... Python을 입력하십시오 ...

Bitget은 스팟 거래, 계약 거래 및 파생 상품을 포함한 다양한 거래 서비스를 제공하는 Cryptocurrency 교환입니다. 2018 년에 설립 된이 교환은 싱가포르에 본사를두고 있으며 사용자에게 안전하고 안정적인 거래 플랫폼을 제공하기 위해 노력하고 있습니다. Bitget은 BTC/USDT, ETH/USDT 및 XRP/USDT를 포함한 다양한 거래 쌍을 제공합니다. 또한 Exchange는 보안 및 유동성으로 유명하며 프리미엄 주문 유형, 레버리지 거래 및 24/7 고객 지원과 같은 다양한 기능을 제공합니다.

Gate.io는 사용자가 설치 패키지를 다운로드하여 장치에 설치하여 사용할 수있는 인기있는 cryptocurrency 교환입니다. 설치 패키지를 얻는 단계는 다음과 같습니다. Gate.io의 공식 웹 사이트를 방문하고 "다운로드"를 클릭하고 해당 운영 체제 (Windows, Mac 또는 Linux)를 선택하고 컴퓨터에 설치 패키지를 다운로드하십시오. 설치 중에 항 바이러스 소프트웨어 또는 방화벽을 일시적으로 비활성화하여 원활한 설치를 보장하는 것이 좋습니다. 완료 후 사용자는 GATE.IO 계정을 만들려면 사용을 시작해야합니다.

세계 최고의 디지털 자산 거래소 인 Ouyi Okx는 이제 안전하고 편리한 거래 경험을 제공하기 위해 공식 설치 패키지를 시작했습니다. OUYI의 OKX 설치 패키지는 브라우저를 통해 액세스 할 필요가 없습니다. 설치 프로세스는 간단하고 이해하기 쉽습니다. 사용자는 최신 버전의 설치 패키지를 다운로드하고 설치를 단계별로 완료하면됩니다.

시스템이 다시 시작된 후 UnixSocket의 권한을 자동으로 설정하는 방법. 시스템이 다시 시작될 때마다 UnixSocket의 권한을 수정하려면 다음 명령을 실행해야합니다.

OKX라고도하는 Ouyi는 세계 최고의 암호 화폐 거래 플랫폼입니다. 이 기사는 OUYI의 공식 설치 패키지 용 다운로드 포털을 제공하여 사용자가 다른 장치에 OUYI 클라이언트를 설치할 수 있도록합니다. 이 설치 패키지는 Windows, Mac, Android 및 iOS 시스템을 지원합니다. 설치가 완료되면 사용자는 OUYI 계정에 등록하거나 로그인하고 암호 화폐 거래를 시작하며 플랫폼에서 제공하는 기타 서비스를 즐길 수 있습니다.
