Tôi đang xem một tập lệnh bash với đoạn mã sau:
#!/bin/sh
set -e # Exit if any command fails
# If multiple args given run this script once for each arg
test $2 && {
for arg in $@
do $0 $arg
done
exit
}
.
.
.
Như đã đề cập trong bình luận, mục đích là "chạy tập lệnh trên mỗi đối số nếu có nhiều hơn một" Tôi có một số mã người chạy để kiểm tra điều này:
# install-unit
# If multiple args given run this script once for each arg
test $2 && {
echo "\$0: $0"
echo "\$1: $1"
echo "\$2: $2"
echo "test \$2 && is true"
}
test $2 && {
# note this is just a regular bash for loop
# http://goo.gl/ZHpBvT
for arg in $@
do $0 $arg
done
exit
}
echo "running: $1"
cung cấp cho những điều sau đây:
sh ❯ ./multiple-run.sh cats and dogs and stuff
$0: ./multiple-run.sh
$1: cats
$2: and
test $2 && is true
running: cats
running: and
running: dogs
running: and
running: stuff
sh ❯ ./multiple-run.sh cats
running: cats
Tôi muốn ai đó giải nén test $2 && {}
phần và exit
vỏ được tích hợp. Lúc đầu, tôi đã nghĩ rằng việc test $2
kiểm tra xem có nhiều đối số hơn không, và có lẽ là vậy, nhưng có vẻ lạ vì dường như có hai biểu thức cách nhau bởi "và" &&
, và tôi cũng chỉ bối rối không biết cái tích hợp này làm gì exit
.
Giải thích tiếng Anh đơn giản với các ví dụ và tài liệu tham khảo được đánh giá cao :)
Cảm ơn!
Chỉnh sửa: Cảm ơn Stéphane Chazelas vì điều đó. Đối với những ai đang bối rối bởi sự thay đổi trong cú pháp vòng lặp, hãy kiểm tra số 3 trong này geekstuff bài viết. Để tóm tắt:
echo "positional parameters"
for arg do
echo "$arg"
done
echo "\nin keyword"
for arg in "$@"
do echo "$arg"
done
cho chúng tôi:
❯ ./for-loop-positional.sh cats and dogs
positional parameters
cats
and
dogs
in keyword
cats
and
dogs
for arg do
cú pháp.