Điểm:2

Đánh giá chuỗi ```$((expression))```-like và lưu vào một biến

lá cờ in

Điều này nghe có vẻ khá khó xử đối với một số bạn. Giả sử tôi có một chuỗi đại diện cho một số $((biểu thức)), biểu thức số học toán học như '$((1+1))'. Tôi muốn thực hiện nó và cung cấp kết quả của nó cho một biến.

Ví dụ:

$ biểu thức='$((5+5))'
$ tiếng vang $ biểu thức 
'$((5+5))'

$ # Kết quả mong đợi: 10

Làm cách nào tôi có thể đánh giá chuỗi đó và lưu trữ kết quả của nó?

Bruno Henrique Peixoto avatar
lá cờ in
Ồ, tôi có thể nấu một món mì ống tuyệt vời với tất cả những sai lầm macarronic đó, cảm ơn!
Điểm:1
lá cờ jp

Nếu bạn đang đánh giá một chuỗi hãy thử đánh giá.

str="$[ 5 + 5 ]"
eval "numb=$str" # Biến thành `numb=$[ 5 + 5 ]`
echo $numb # Đầu ra 10

đánh giá có thể thực thi các chuỗi như thể chúng là mã shell. Hãy cẩn thận! Nếu $str có thể chứa các ký tự đặc biệt, nó có thể phá vỡ tập lệnh của bạn hoặc thậm chí tạo lỗ hổng bảo mật.

Điểm:0
lá cờ sd

Chỉ cần lưu trữ nó trong biến như bạn thường làm.

$ kết quả=$((5+5))
$ tiếng vang $kết quả 
10

Nếu đây không phải là ý của bạn, chỉnh sửa bài đăng của bạn và đăng thông tin bổ sung.

Bruno Henrique Peixoto avatar
lá cờ in
Tôi đã cập nhật câu hỏi để hiểu rõ hơn về trường hợp của mình. Nhưng tôi đánh giá cao câu trả lời sofar! :-)
lá cờ jp
Dan
@BrunoHenriquePeixoto Trong bản chỉnh sửa của mình, bạn đã sử dụng gần như cùng một mã. Câu trả lời này chính xác là những gì bạn muốn trong trường hợp này. Lỗi duy nhất bạn gặp phải là sử dụng dấu ngoặc kép trên phần `$((5+5))`, bạn cần xóa phần đó.
Bruno Henrique Peixoto avatar
lá cờ in
Chà, hoạt động tôi cần đánh giá có dấu ngoặc kép. Sau đó, tôi sợ rằng tôi không thể đánh giá chúng.
Điểm:0
lá cờ cn

Nếu nó thực sự là toán học, đặc biệt nếu nó liên quan đến số học số nguyên đơn giản, bạn có thể sử dụng chính xác định dạng bạn có:

$ biến=$((1+1))
$ tiếng vang "$var"
2

Điều tương tự cũng xảy ra nếu đó là một lệnh. Ví dụ, toán học phức tạp hơn một chút có thể được thực hiện bằng cách chuyển sang bc:

## phép toán số nguyên đơn giản hoạt động
$ tiếng vang $((3 * 2))
6
## phân số thất bại
$ tiếng vang $((1.3 * 2))
bash: 1.3 * 2: lỗi cú pháp: toán tử số học không hợp lệ (mã thông báo lỗi là ".3 * 2")
## bc hoạt động
$ tiếng vang "1,3 * 2" | bc
2.6

Vì vậy, để lưu trữ nó trong một biến, bạn chỉ cần sử dụng tiêu chuẩn lệnh thay thế:

$ var=$(tiếng vang "1,3 * 2" | bc)
$ tiếng vang "$var"
2.6

Cuối cùng, bạn cũng có đánh giá dựng sẵn (xem giúp đánh giá Trong đánh đập):

$ trợ giúp đánh giá
eval: eval [arg ...]
    Thực thi các đối số như một lệnh shell.
    
    Kết hợp các ARG thành một chuỗi, sử dụng kết quả làm đầu vào cho trình bao,
    và thực hiện các lệnh kết quả.
    
    Trạng thái thoát:
    Trả về trạng thái thoát của lệnh hoặc thành công nếu lệnh là null.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.