執行使用 shell 變數的“sed”命令時出錯

執行使用 shell 變數的“sed”命令時出錯

這已經讓我發瘋了......

我想列出目錄中的文件,並根據除最新文件之外的所有文件的編號進行交互,這是程式碼片段


FILECOUNT=$(ls -lt [dir]*.log | grep -c .log )
for (( c=2; c<=$FILECOUNT; c++ ))
do
FILEDIR=$("ls -1t [dir]*.log | sed -n '$c p'")

我一直在$c解釋方面遇到問題,上面的格式可以工作,但 sed 命令失敗...儘管在 cli 中輸入日誌的最後一行就像一個魅力


 FILECOUNT=24

 (( c=2 ))

 (( c<=24 ))

C is : 2

 'ls -1t [dir]*.log | sed -n '\''2 p'\'''

 line 41: ls -1t [dir]*.log | sed -n '2 p': No such file or directory

任何幫助將不勝感激!

顯然[dir]是一個有效的目錄

答案1

您遇到的主要問題是您將命令替換中的所有內容都放在雙引號中:

FILEDIR=$("ls -1t [dir]*.log | sed -n '$c p'")

這將指示 shell 查找可執行文件逐字名稱 ls -1t [dir]*.log | sed -n '$c p'"ls並且沒有參數,這與使用選項-1t和操作數執行命令相反,其輸出將通過選項和參數[dir]*.log通過管道傳輸到可執行檔。嘗試刪除雙引號,如sed-n'$c p'

FILEDIR=$(ls -1t [dir]*.log | sed -n '$c p')

然而那麼您將面臨單引號命令中禁用變數擴充的問題sed。一推薦方式是打破單引號參數並將變數放在雙引號感嘆詞中,如

FILEDIR=$(ls -1t [dir]*.log | sed -n "$c"' p')

另外,我必須發出強制警告不解析輸出ls。 ;)

相關內容