จะเก็บไพพ์ (|) ในตัวแปรได้อย่างไร?


12

แนวคิดจะใช้เป็น ... ไปป์ในคำสั่ง ตัวอย่างเช่นสมมติว่ามีเส้นทางยาว ๆ ที่ต้องพิมพ์ซ้ำอีกครั้งตามด้วยไพพ์และโปรแกรมที่สองเช่น

"directory1/directory2/direcotry3/file.dat | less -I "

ฉันต้องการให้ส่วนนั้นถูกเก็บไว้ในตัวแปรดังนั้นจึงสามารถใช้เช่นนี้:

r="directory1/directory2/direcotry3 \| less -I -p "
$ cat path1/path2/$r <searchterm>

แต่ฉันได้รับ

cat: invalid option -- I
Try `cat --help' for more information.

... หมายถึงท่อไม่ทำงาน


1
ในขณะที่คุณสามารถทำได้evalโดยปกติคุณจะทำหน้าที่
frostschutz

คำตอบ:


21

bash ไม่ตีความบรรทัดคำสั่งใหม่ทั้งหมดหลังจากการขยายตัวแปร หากต้องการบังคับให้ใส่evalด้านหน้า:

r="directory1/directory2/direcotry3/file.dat | less -I "
eval "cat path1/path2/$r"

อย่างไรก็ตามมีวิธีที่สง่างามกว่าในการทำเช่นนี้ (นามแฝงฟังก์ชัน ฯลฯ )


8

คุณกำลังพยายามผสมรหัสและข้อมูลซึ่งไม่ใช่ความคิดที่ดี แต่กำหนดฟังก์ชั่นซึ่งจะนำไฟล์ (directory?) lessชื่อเป็นอาร์กิวเมนต์และแสดงด้วย

view () {
    less -I -p "$2" $1
}

view directory1/directory2/directory3 <searchterm>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.