在shell中使用for迴圈語句時,引數列表有時候需要將空格納入引數當中,這時就不好使用空格作為分隔符。如下例中,我實際想要輸出的是a1、a2、b1、b2以及hello world,但卻輸出了如下內容:
[root@youxi1 ~]# vim a.sh#!/bin/bash
list="a1 a2 b1 b2 \"hello world\""
for var in $list
do echo $var
done
[root@youxi1 ~]# sh a.sh
a1a2
b1b2
"hello
world"
預設情況下,shell會以空格、製表符、換行符作為分隔符,但遇到以上情況時,需要使用ifs來自定義shell的分隔符。
ifs可以指定單個字元作為分隔符,ifs=:(以冒號作為分隔符);ifs也可以指定多個字元作為分隔符,ifs=\n:;(以反斜槓、n、冒號、分號作為分隔符)。注意:在ifs中,$'\n'和$'\t'才是換行符和製表符。
例項如下:
[root@youxi1 ~]# vim a.shifs=$'\n'
list="a1a2\na3"
#!/bin/bash
ifs=:
for var in `tail -4 /etc/passwd | head -2`
do echo $var
done
[root@youxi1 ~]# sh a.sh
polkitd
x999
998user for polkitd
//sbin/nologin
sshdx74
74privilege-separated ssh
/var/empty/sshd
/sbin/nologin
自定義變數和語句結束分隔符
有時候為了完成乙個常用的功能需要執行許多條語句,每次都在客戶端裡一條一條的去輸入這麼多語句是很煩的,我們希望有一種批處理的形式,讓我們以很簡單的方式一次性的執行完這些語句,mysql 中的儲存程式本質上封裝了一些可執行的語句,然後給使用者提供一種簡單的呼叫方式來執行這些語句。根據呼叫方式的不同,可以...
Hive的列分隔符和行分隔符
在建立hive表時,預設行分隔符 a 列分隔符 n 這兩項也是可以設定的。在實際開發中,一般預設使用預設的分隔符,當然有些場景下也會自定義分隔符。spark hive use test db 建立外部表 create external table test tb user id bigint com...
shell分隔符引起的問題?2020 08 10
shell分隔符引起的問題?20200810 在linux環境中使用shell指令碼處理資料,從data.csv檔案中讀取多個機房裝置的ip,並將資料彙總。原始資料 data.csv 機房名 裝置名 ip 機房1 機器1 192.168.1.2 機房1 機器2 192.168.1.3 機房2 機器3...