shell命令之 IFS 內部分隔符的用法

2021-10-09 14:45:08 字數 1545 閱讀 6848

題目應用

shell 指令碼中有個變數叫ifs(internal field seprator) ,內部域分隔符。完整定義是the shell uses the value stored in ifs, which is the space, tab, and newline characters by default, to delimit words for the read and set commands, when parsing output from command substitution, and when performing variable substitution.

shell 的環境變數分為set, env兩種,其中 set 變數可以通過 export 工具匯入到 env 變數中。其中,set 是顯示設定shell變數,僅在本 shell 中有效;env 是顯示設定使用者環境變數 ,僅在當前會話中有效。換句話說,set 變數裡包含了env 變數,但set變數不一定都是env 變數。這兩種變數不同之處在於變數的作用域不同。顯然,env 變數的作用域要大些,它可以在 subshell 中使用。

ifs 是一種 set 變數,當 shell 處理"命令替換"和"引數替換"時,shell 根據 ifs 的值,預設是 space, tab, newline 來拆解讀入的變數,然後對特殊字元進行處理,最後重新組合賦值給該變數

檢視ifs的值

echo 「$ifs」

echo 「$ifs」|od -b

0000000040011012012

0000004

直接輸出ifs是看不到值的,轉化為二進位制就可以看到了,"040"是空格,"011"是tab,"012"是換行符"\n" 。最後乙個 012 是因為 echo 預設是會換行的。

buuctf題目

$0        shell本身的檔名

$1~$n 新增到shell的各引數值。$1是第1引數、$2是第2引數…

$$ shell本身的pid(processid)

$! shell最後執行的後台process的pid

$? 上個命令的退出狀態,或函式的返回值 $- 使用set命令設定的flag一覽

$* 所有引數列表,不包括指令碼本身。如"$*"用「"」括起來的情況、以"

$1$2 … $n

"的形式輸出所有數。

$@ 所有引數列表。如"

$@"用「"」括起來的情況、以"$1"

"$2" … "$n" 的形式輸出所有引數。

$# shell的引數個數

#!/bin/sh

echo

"shell指令碼名稱: $0"

echo

"傳到shell的第乙個引數: $1"

echo

"傳到shell的第二個引數: $2"

綜合大佬部落格

shell內部命令

bash命令解釋套裝程式包含了一些內部命令。內部命令在目錄列表時是看不見的,它們由 shell 本身提供。常用的內部命令有 echo,eval,exec,export,readonly,read,shift,wait 和點 下面簡單介紹其命令格式和功能。1 echo 命令格式 echo arg 功能...

Shell指令碼之Bash內部命令

本文是自己學習的總結,僅以作分享。若有不對的地方歡迎指正。bash內部命令 有些內部命令在目錄列表是看不見的,他們有shell本身提供,常用的內部命令有 echo eval exec export readonly read shift wait exit和 echo 將變數名錶指定的變數顯示到標準...

shell內部命令使用詳解

shell各種內部命令詳解 1 exec命令 exec後面執行時普通命令如 ls,cat,less等命令時,如果在當前shell中執行,則在執行完exec命令後,shell程序結束。因此,我們一般將該命令放入指令碼中執行,執行完該命令,subshell自動結束,回到主shell中。特殊情況下的exe...