Nối chuỗi vào các phần tử mảng và nối chúng trong một biểu thức


2

Giả sử tôi có một mảng

> words=(foo bar baz)

Bây giờ tôi có thể tham gia các yếu tố

> echo ${(j., .)words}
foo, bar, baz

Và tôi có thể nối một chuỗi vào các phần tử:

> echo ${^words}yeah
fooyeah baryeah bazyeah

Với những điều sau đây, tôi có thể nối và tham gia các yếu tố:

> wordsyeah=(${^words}yeah)
> echo ${(j., .)wordsyeah}
fooyeah, baryeah, bazyeah

Có thể thực hiện in "fooyeah, baryeah, bazyeah" trong một biểu thức, tức là không sử dụng các biến bổ sung?

Phần thưởng: Tôi có thể in mà không sử dụng bất kỳ biến nào không?

Theo như tôi có thể nói, điều này giúp giảm bớt việc mở rộng tham số trên các chuỗi, nhưng tôi không thể tìm ra cách (hoặc nếu) điều đó là có thể.


Đây thực chất là một bản sao của câu hỏi này trên SO . Theo câu trả lời của tôi, bạn có thể đạt được điều này echo ${(j:, :):-${^${=:-foo bar baz}}yeah}, điều này thực sự khó nhập và dài hơn 12 ký tự echo fooyeah, baryeah, bazyeah. Vì vậy, nó chủ yếu có ý nghĩa nếu các biến có liên quan, ví dụ echo ${(j:, :):-${^${words}}yeah} (với wordsmột mảng).
Adaephon

Wow, bạn hoàn toàn đúng. Tôi không thể tìm thấy câu hỏi đó. Bây giờ tôi đang tự hỏi tại sao tôi cũng đăng bài này ở đây. Và tôi đã viết câu trả lời giống như bạn nhận xét. Tôi sẽ để các mod quyết định phải làm gì với câu hỏi này ngay bây giờ.
Simon Kohlmeyer

Câu trả lời:


2

Câu trả lời là

> print ${(j., .)${:-${^words}yeah}}
fooyeah, baryeah, bazyeah

hoặc là

> print ${(j., .)${:-{foo,bar,baz}yeah}}
fooyeah, baryeah, bazyeah

không sử dụng biến

Phần quan trọng là ${name:-word}. Nó được giải thích trong hướng dẫn .

${name-word}
${name:-word}

Nếu tên được đặt hoặc ở dạng thứ hai là không rỗng, thì thay thế giá trị của nó; mặt khác thay thế từ. Trong tên mẫu thứ hai có thể được bỏ qua, trong trường hợp đó từ luôn luôn được thay thế.

Cảm ơn phy1729 từ #zsh đã chỉ ra điều này cho tôi :)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.