Câu hỏi bash lưu trữ lệnh trong biến


hey im mới để bash và đối với một số lý do tôi không thể lưu trữ đầu ra vào một biến

#!/bin/bash
file="~/cs/cs3776/assignment2/passwd1.txt"
while read p; do

        echo "$p" | cut -d: -f1





done < passwd1.txt

thay đổi tiếng vọng thành

$a=$(echo "$p" | cut -d: -f1)
echo "$a"

dường như không hoạt động


1
2018-02-28 00:24


gốc


Bên cạnh việc thay đổi echo như bạn đã chỉ ra, bạn đã làm gì để thử chẩn đoán điều này? Bạn có nhận được bất kỳ đầu ra nào không? Bạn có chắc chắn rằng passwd1.txt tệp có văn bản trong đó? Nó có được định dạng như /etc/passwd? Nếu không, hãy cho chúng tôi thấy nó trông như thế nào - nó không phải là của bạn thực tế dữ liệu, chỉ cần một cái gì đó để minh họa định dạng. P.S. Nói a=..., không phải $a=.... - G-Man


Các câu trả lời:


Có hai vấn đề ở đây. Cái bạn đang thấy là bạn đang sử dụng ký hiệu đô la trên biến bạn đang gán cho - ký hiệu đô la được sử dụng để được giá trị của một biến, không phải để đặt nó. Vì vậy, sử dụng a=$(echo "$p" | cut -d: -f1) thay vì $a=$(echo "$p" | cut -d: -f1).

Vấn đề thứ hai là trong bài tập file="~/cs/cs3776/assignment2/passwd1.txt" -- các ~ cần được mở rộng đến đường dẫn đến thư mục chính của bạn, nhưng việc mở rộng đó không xảy ra khi nó ở trong ngoặc kép. Trong trường hợp này, không có gì khác ở đó sẽ được mở rộng, vì vậy chỉ cần để lại các dấu ngoặc kép (file=~/cs/cs3776/assignment2/passwd1.txt) sẽ hoạt động. Nếu dấu ngoặc kép là cần thiết cho phần còn lại của chuỗi, có thể trích dẫn một phần chuỗi (file=~/"cs/cs3776/assignment2/passwd1.txt").


1
2018-03-01 03:37



Những gì bạn đã viết về vấn đề thứ hai là nói chung, nó là tốt, bạn đã phát hiện ra điều này. Trong trường hợp đặc biệt này, nó không thay đổi bởi vì $file không bao giờ được sử dụng. - Kamil Maciorowski