Command-Substitution
什麼問題/模式證明使用命令替換是合理的?
我使用 Ubuntu 和 Bash 在 DigitialOcean 等“自我管理的外殼”託管服務提供商上建立了一些伺服器環境,我在其上執行 Drupal/WordPress 應用程序。
一直以來,我都沒有必要使用所謂的“命令替換”。
我問,Bash 程序員必須使用這個概念的“模式”會是什麼問題?請舉個例子?
命令替換意味著執行 shell 命令並將其輸出儲存到變數或使用 echo 命令顯示回來。例如,顯示日期和時間:
echo "Today is $(date)"
在我的命令接收另一個命令或範例的輸出作為參數的情況下,它很有用。
命令替換允許替換命令的輸出來代替命令名稱本身。
命令替換提供了一種方便的方式來使用命令的輸出,而無需先將其寫入臨時文件,然後再從該文件中讀取它。如果命令的輸出是單行的短字元串,則最好這樣做。
有些人使用命令替換來收集命令的輸出,即使輸出量可能是多行文件。這通常不是使用命令替換的好方法。相反,應該使用使用管道或臨時文件在處理階段之間傳遞數據的標準 Unix 習慣用法。
我使用的命令替換範例:
例如,要確定目前使用者是否以 root 身份執行腳本:
if [ "$( id -u )" -ne 0 ]; then echo 'This script requires root privileges, re-run with sudo' >&2 exit 1 fi
命令替換將
$(id -u)
替換為 的輸出id -u
,這將返回目前使用者的 UID(整數)。另一個例子。我正在使用 GnuPG 簽署
git
送出。為了讓 GnuPG 正常工作,我需要GPG_TTY
在我的互動式 shell 的初始化文件中設置為目前終端設備的名稱。我這樣做export GPG_TTY="$( tty )"
這取決於目前終端設備在 shell 會話中的設置
GPG_TTY
。/dev/ttyp4
另一個例子。我有一個腳本必須將在 Solaris 機器上執行視為一種特殊情況:
case "$( uname -s )" in SunOS) # code specific for Solaris ;; *) # code for all other Unix platforms esac
另一個例子。該
getconf PATH
命令返回目前系統的“預設路徑”。我在某些情況下使用它來將PATH
變數重置為“正常的預設”值:PATH="$( getconf PATH )"