2013-07-23 31 views

Trả lời

5

Bạn có thể sử dụng printf.

% printf 'str1%s\t' 'str2' 'str3' 'str4' 
str1str2 str1str3 str1str4 
3

Dường như không có cách nào. Bạn sẽ phải sử dụng các vòng lặp để tạo ra các tên này, có lẽ trong một hàm. Hoặc sử dụng các biến để thay thế các phần chung, có thể với "set -u" để ngăn chặn lỗi chính tả.

Tôi thấy rằng bạn thích dấu gạch ngang vì lý do hiệu suất, tuy nhiên bạn dường như không cung cấp bất kỳ số nào để chứng minh quyết định của mình. Tôi khuyên bạn nên đo lường sự khác biệt hiệu suất thực tế và đánh giá lại. Bạn cũng có thể rơi vào quá trình tối ưu hóa sớm. Hãy xem xét bao nhiêu thời gian thực hiện và gỡ lỗi bạn sẽ tiết kiệm được bằng cách sử dụng Bash so với hiệu suất giảm có thể.

+0

Tôi nghĩ rằng nó thực sự là tối ưu hóa sớm, tôi đã không chắc chắn vì tôi không viết nhiều kịch bản shell. Tôi nhận ra họ không làm gì phức tạp nên sự khác biệt sẽ chỉ bash thời gian khởi động ... – greg0ire

+0

@ greg0ire, vâng, chủ yếu là thời gian khởi động, nhưng nó vẫn có thể quan trọng đối với trường hợp của bạn nếu bạn cần nhiều lời gọi script hoặc sử dụng nhiều sub-shells trong mã của bạn. Nếu hiệu suất là quan trọng đối với bạn, hãy đo lường nó cho một kịch bản điển hình. – spbnick

+0

thời gian mang lại cho tôi sự khác biệt: bash = 5ms, sh = 3ms. Tôi nghĩ rằng đó là chấp nhận được mặc dù. – greg0ire

0

Tôi thực sự thích giải pháp printf được cung cấp bởi @mikeserv, nhưng tôi nghĩ tôi sẽ cung cấp ví dụ sử dụng vòng lặp.

Dưới đây có thể hữu ích nhất nếu bạn muốn thực hiện một lệnh cho mỗi chuỗi mở rộng, thay vì cung cấp cả hai chuỗi như args cho cùng một lệnh.

for X in composer sismo; do 
    echo "php/$X"     # replace 'echo' with your command 
done 

Bạn có thể, tuy nhiên, viết lại nó như

ARGS="$(for X in composer sismo; do echo "php/$X"; done)" 
echo $ARGS       # replace 'echo' with your command 

Lưu ý rằng $ARGS là không thể viện chứng trong lệnh trên, và lưu ý rằng điều này có nghĩa rằng nội dung của nó được wordsplitted (tức là nếu có chuỗi ban đầu của bạn chứa không gian, nó sẽ phá vỡ).

Các vấn đề liên quan