Kịch bản của bạn (với dấu nháy đơn xung quanh kịch bản awk) sẽ làm việc như mong đợi:
$ cat script-single
#!/bin/bash
line="foo bar"
echo $line | awk '{print $1}'
$ ./script-single test
foo
Sau đây, tuy nhiên, sẽ nghỉ (kịch bản sẽ ra một dòng trống):
$ cat script-double
#!/bin/bash
line="foo bar"
echo $line | awk "{print $1}"
$ ./script-double test
Lưu ý các dấu ngoặc kép xung quanh chương trình awk
.
Bởi vì dấu ngoặc kép mở rộng biến $1
, lệnh awk sẽ nhận được tập lệnh {print test}
, in nội dung của biến awk test
(trống). Dưới đây là một kịch bản cho thấy rằng:
$ cat script-var
#!/bin/bash
line="foo bar"
echo $line | awk -v test=baz "{print $1}"
$ ./script-var test
baz
đọc liên quan: Bash Reference Manual - Quoting và Shell Expansions
Nó sẽ không được thay thế. Nó sẽ là từ đầu tiên trong '" $ line "' – user000001
Mục đích của những dấu nháy đơn xung quanh chương trình "awk'" là đảm bảo rằng bash sẽ không cố gắng thực hiện bất kỳ tham số nào, vì vậy tập lệnh của bạn sẽ hoạt động như kỳ vọng. –
@CostiCiudatu từ được mở rộng – SheetJS