Anda membingungkan dua jenis input yang sangat berbeda: STDIN dan argumen. Argumen adalah daftar string yang disediakan untuk perintah saat dimulai, biasanya dengan menentukan mereka setelah nama perintah (misalnya echo these are some arguments
atau rm file1 file2
). STDIN, di sisi lain, adalah aliran byte (kadang-kadang teks, kadang-kadang tidak) yang perintahnya dapat (secara opsional) membaca setelah dimulai. Berikut adalah beberapa contoh (catatan yang cat
dapat mengambil argumen atau STDIN, tetapi ada bedanya dengan mereka):
echo file1 file2 | cat # Prints "file1 file2", since that's the stream of
# bytes that echo passed to cat's STDIN
cat file1 file2 # Prints the CONTENTS of file1 and file2
echo file1 file2 | rm # Prints an error message, since rm expects arguments
# and doesn't read from STDIN
xargs
dapat dianggap sebagai mengubah input gaya STDIN ke argumen:
echo file1 file2 | cat # Prints "file1 file2"
echo file1 file2 | xargs cat # Prints the CONTENTS of file1 and file2
echo
sebenarnya melakukan lebih atau kurang sebaliknya: ia mengubah argumennya menjadi STDOUT (yang dapat disalurkan ke STDIN beberapa perintah lain):
echo file1 file2 | echo # Prints a blank line, since echo doesn't read from STDIN
echo file1 file2 | xargs echo # Prints "file1 file2" -- the first echo turns
# them from arguments into STDOUT, xargs turns
# them back into arguments, and the second echo
# turns them back into STDOUT
echo file1 file2 | xargs echo | xargs echo | xargs echo | xargs echo # Similar,
# except that it converts back and forth between
# args and STDOUT several times before finally
# printing "file1 file2" to STDOUT.
ls | grep -v "notes.txt" | xargs rm
untuk menghapus semuanya kecualinotes.txt
, atau secara umum, tidak pernah menguraikanls
output . Perintah Anda akan rusak jika satu file berisi spasi, misalnya. Cara yang lebih aman adalahrm !(notes.txt)
di Bash (denganshopt -s extglob
set), ataurm ^notes.txt
di Zsh (denganEXTENDED_GLOB
) dll.