自定義Shell分隔符

2022-05-24 11:45:13 字數 948 閱讀 9084

在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.sh

ifs=$'\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...