Kadang-kadang perlu untuk meniru dan memverifikasi variabel di atas dalam contoh kecil dan kemudian dapat disalin segera ke beberapa skrip, dll.
Saya mencoba menyelesaikannya dengan menggunakan contoh sederhana dengan cara berikut:
(find $1) /tmp
sh -c '(find $1) /tmp'
sh -c "find $1" /tmp
echo '(find $1) /tmp' | sh
dan dengan kombinasi lainnya. Juga bereksperimen dengan menambahkan arahan juru bahasa shebang #!/bin/sh -x
, tetapi tidak mendapatkan hasil yang diinginkan.
Bisakah saya melakukan ini secara sederhana?
(find $1) /tmp
adalah kesalahan sintaksis. Sebenarnya(any-command) more-arguments
ini adalah kesalahan sintaksis. Bisakah Anda menjelaskan secara berbeda apa yang Anda coba lakukan?rc
keluarga (rc
,es
,akanga
...), di mana dalam kasus yang setara denganfind $1 /tmp
.Jawaban:
Argumen pertama setelah
sh -c inline-script
masuk ke$0
(yang juga digunakan untuk pesan kesalahan), dan sisanya masuk$1
,$2
...Jadi kamu mau:
(di masa lalu, Anda bisa menemukan
sh
implementasi di mana arg pertama masuk$1
sebagai gantinya, sehingga Anda akan melakukan:Atau:
untuk menjelaskan kedua perilaku, tetapi cangkang tersebut hilang sekarang karena POSIX sudah umum dan tersedia untuk umum).
Jika Anda ingin mengatur
$1
,$2
dalam lingkup lokal di dalam shell saat ini, di situlah Anda akan menggunakan fungsi. Dalam cangkang mirip Bourne:Beberapa shell mendukung fungsi anonim. Itu adalah kasus
zsh
:Atau
es
:Untuk mengubah parameter posisi saat ini, secara permanen, sintaks bergantung pada shell. dchirikov telah menutupi Bourne-seperti kerang (Bourne, Korn,
bash
,zsh
, POSIX,ash
,yash
...).Sintaksnya adalah:
Namun, Anda perlu:
Untuk mengosongkan daftar itu (atau
shift "$#"
) danuntuk mengatur
$1
sesuatu yang dimulai dengan-
atau+
, jadi itu kebiasaan yang baik untuk selalu menggunakanset --
terutama ketika menggunakan data arbitrer sepertiset -- "$@" other-arg
menambahkan argumen ke akhir daftar parameter posisi.Dalam shell
csh
keluarga (csh
,tcsh
), Anda menetapkan keargv
array:Dalam kerang dari
rc
keluarga (rc
,es
,akanga
), dengan*
array yang:Meskipun Anda juga dapat menetapkan elemen secara individual:
Dalam
fish
, parameter posisi berada diargv
array yang hanya (tidak$1
,$@
ada):Di
zsh
, untuk kompatibilitas dengancsh
, Anda juga dapat menetapkan keargv
array:Dan Anda juga bisa melakukan:
Itu berarti Anda juga dapat melakukan hal-hal seperti:
untuk menambahkan argumen di akhir, dan:
untuk menghapus argumen dari ujung atau tengah, yang tidak mudah Anda lakukan dengan shell lain.
sumber
adalah yang Anda butuhkan:
sumber