![Linux命令列擴展,重複使用價值](https://rvso.com/image/1303444/Linux%E5%91%BD%E4%BB%A4%E5%88%97%E6%93%B4%E5%B1%95%EF%BC%8C%E9%87%8D%E8%A4%87%E4%BD%BF%E7%94%A8%E5%83%B9%E5%80%BC.png)
我正在嘗試 tftp 一堆文件
tftp -m binary 192.168.1.2 -c put file1 target/file1
我一直在嘗試使用命令列擴展,例如
tftp -m binary 192.168.1.2 -c put `ls *` target/`ls *`
但這似乎不起作用,在目標後面插入一個“:”。
有沒有一種快速的方法來擴展這種東西?
我想將第一次擴充中獲得的值重用到下一次擴充中
答案1
首先,`ls *`
是錯誤的。僅使用 即可實現相同的預期結果*
,如下所示:
tftp -m binary 192.168.1.2 -c put * target/
通配符擴充的處理方式為你的外殼在運行命令之前,因此擴展*
文件列表的正確方法是只需使用*
, 絕不`ls`
。
其次,傳輸協定 put
命令可以上傳多個文件,但它只接受單一目標目錄這樣做時。您不需要指定多個目標,而且無論如何它都不起作用——tftp
不知道原始檔案在哪裡結束,目標檔案在哪裡開始。 (如前所述,通配符由您的 shell 擴展,因此tftp
會收到put file1 file2 file3
,不是 put *
.)
神秘:
是由ls
列出子目錄的內容引起的。當您運行時ls *
,shell 實際上會運行ls file1 file2 dir1
(假設您有兩個檔案和一個目錄)。然後ls
列印“ file1
”、“ file2
”,然後列印“ dir1: (...all files in dir1...)
”。