Đã đến lúc phải giải quyết câu hỏi hóc búa này đã làm phiền tôi trong nhiều năm ...
Thỉnh thoảng tôi đã gặp điều này và nghĩ rằng đây là cách để đi:
$(comm "$(arg)")
Và nghĩ rằng quan điểm của tôi được hỗ trợ mạnh mẽ bởi kinh nghiệm. Nhưng tôi không chắc nữa. Shellcheck cũng không thể quyết định được. Đó là cả hai:
"$(dirname $0)"/stop.bash
^-- SC2086: Double quote to prevent globbing and word splitting.
Và:
$(dirname "$0")/stop.bash
^-- SC2046: Quote this to prevent word splitting.
Logic đằng sau là gì?
(Đó là phiên bản Shellcheck 0.4.4, btw.)
"$(dirname "$0")"/stop.bash
? Nó dường như hoạt động ... Câu chuyện là gì?
shell_level_1 $(shell_level_2) shell_level_1
khi bạn ở trong " $(....)
bạn nhập" lớp vỏ "của vỏ, NHƯNG bạn có thể viết vào đó như thể bạn ở cấp độ chính (nghĩa là bạn có thể viết trực tiếp "
thay vì \"
, v.v.). ví dụ: touch "/tmp/a file" ; echo "its size is: $(find "/tmp/a file" -ls | awk '{print $5}) ..." : if you used backticks you'd have to
find \ "/ tmp / một tệp \" `và print \$5
. Với $(...)
không cần: sự thích nghi vỏ đến tầm cao mới và bạn có thể viết trực tiếp như thể thông dịch viên của bạn bây giờ là ở cấp độ đó quá.