
我有一個看起來像這樣的目錄:
/path/to/files/data-file.1
/path/to/files/data-file.2
/path/to/files/data-file.3
/path/to/files/data-file.4
/path/to/files/data-file.5
/path/to/files/data-file.6
我想製作一個腳本來列出變數中兩個值之間的所有文件,如下所示:
#!/bin/bash
fileA="/path/to/files/data-file.2"
fileB="/path/to/files/data-file.5"
ls -v /path/to/files/*-file.[0-9]* | sed -n '/$fileA/,/$fileB/p'
輸出:
/path/to/files/data-file.2
/path/to/files/data-file.3
/path/to/files/data-file.4
/path/to/files/data-file.5
但是,sed命令似乎不起作用。我猜測是因為變數中的斜杠。有沒有辦法在不改變變數的情況下克服這個問題?我想在 fileA 和 fileB 是動態的腳本中使用這段程式碼。
答案1
如果在第一次出現時對其進行轉義,則可以使用不同的分隔符,這樣斜線就不會混淆sed
。但是,請注意,使用單引號將導致bash
不替換變量,因此在您的範例中,按字面意思sed
查找,因為變數不會擴展。如果使用變數則需要使用雙引號。$fileA
$fileB
所以,這樣的事情應該要有效:
#!/bin/bash
fileA="/path/to/files/data-file.2"
fileB="/path/to/files/data-file.5"
ls -v /path/to/files/*-file.[0-9]* | sed -n "\@$fileA@,\@$fileB@p'