1. <(list)
<(list) 整個可以視為一個檔名看待,因此可以當做另一個程式的參數使用,當然也可
以當作 redirection 使用。想像 list 程式的輸出會存到一個暫存檔,讓另一個程
式以參數的形式取得暫存檔,並讀取暫存檔的內容。
使用多個參數的程式可以利用此功能,例如 cmp 會用到兩個參數,當要比較的內容是由
其它程式的輸出而來,則不用先將其它程式的輸出分別存到暫存檔,再用 cmp 比較暫存
檔。底下範例用來比較兩個目錄下是否有一樣的檔案名稱,但不支援子目錄的比較。
範例:
#!/bin/sh
mkdir -p folder1
mkdir -p folder2
touch folder1/file1
touch folder2/file2
# Disable POSIX mode because process substitution is not
# available in POSIX mode
set +o posix
if cmp -s <(ls folder1) <(ls folder2); then
echo "folder1 and folder2 are the same."
else
echo "folder1 and folder2 are different."
fi
touch folder1/file2
touch folder2/file1
if cmp -s <(ls folder1) <(ls folder2); then
echo "folder1 and folder2 are the same."
else
echo "folder1 and folder2 are different."
fi
結果:
folder1 and folder2 are different.
folder1 and folder2 are the same.
>(list) 整個可以視為一個檔名看待,因此可以當做另一個程式的參數使用,當然也可
以當作 redirection 使用,想像有一個暫存檔當做 list 程式的輸入,另一個程式
以參數的形式取得暫存檔,對暫存檔的輸出都變成 list 程式的輸入。
沒有留言:
張貼留言