1. 程式人生 > 其它 >Bash 指令碼:`(反引號)運算子和 $()的使用方式

Bash 指令碼:`(反引號)運算子和 $()的使用方式

反引號操作符可以在 中使用,因為它很容易與其他 結合使用。但是,還有一種更“推薦”的方式來做同樣的事情,使用$()運算子。本文將介紹在 shell 中使用他們的優缺點。
反引號的使用方式

下面是一個簡單的例項:

[root@localhost~]#echo"Thereare`ls|wc-l`filesinthisdirectory"
Thereare10filesinthisdirectory


ls |wc -l用於列出和計算當前目錄的檔案數,然後將它嵌入到 echo 中。

在 shell 指令碼中,當然可以執行相同的操作,將ls | wc -l命令的結果分配給一個變數,稍後使用該變數。

[root@localhost~]#file_count=`ls|wc-l`
[root@localhost~]#echo"Thereare$file_countfilesinthisdirectory"
Thereare10filesinthisdirectory
$()的使用方式

也可以通過使用$()代替`反引號來獲得相同的結果,如下例所示:

[root@localhost~]#echo"Thereare$(ls|wc-l)filesinthisdirectory"
Thereare10filesinthisdirectory


下面是一個例子,我需要對網路連線中的某些問題進行故障排除,因此我決定每分鐘顯示總連線數和等待連線數。

[root@localhost~]#vimnetinfo.sh
#!/bin/bash
whiletrue
do
ss-an>netinfo.txt
connections_total=$(catnetinfo.txt|wc-l)
connections_waiting=$(grepWAITnetinfo.txt|wc-l)
printf"$(date+%R)-Total=%6dWaiting=%6d\n"$connections_total$connections_waiting
sleep60
done


執行一下指令碼:

[root@localhost~]#./netinfo.sh
17:13-Total=158Waiting=4
17:14-Total=162Waiting=0
17:15-Total=155Waiting=0
17:16-Total=155Waiting=0
17:17-Total=155Waiting=0
如何選擇使用哪種方式

這裡更推薦使用$()方式。下面是原因:
1. 如果內部命令也使用``運算子可能會變得混亂。

  • 將需要轉義內部的`,如果將單引號作為命令的一部分或結果的一部分,閱讀和排除指令碼故障可能會變得困難。
  • 如果開始考慮在其他`運算子中巢狀`運算子,則事情將不會按預期工作或根本不起作用。

2.$()操作符更安全,更可預測。

$()運算子中的內容被視為 shell 指令碼。從語法上講,這和把程式碼儲存在文字檔案中是一樣的。

以下是`$()行為差異的一些示例:

[root@localhost~]#echo'\$x'
\$x
[root@localhost~]#echo`echo'\$x'`
$x
[root@localhost~]#echo$(echo'\$x')
\$x
總結

在較為複雜的命令語句中,推薦使用$()方式。