我有一個bash腳本,它接收用戶的一組文件。這些文件有時位於名稱中帶有空格的目錄下。不幸的是,與this question不同,所有文件名都通過命令行界面傳遞。讓我們假設路徑在用戶傳入時被正確引用,所以空格(除引用空格外)是路徑之間的分隔符。如何將這些參數轉發到我的bash腳本中的子例程中,以保留引用空格的方式?bash:以空格爲參數傳遞路徑?
16
A
回答
19
#! /bin/bash
for fname in "[email protected]"; do
process-one-file-at-a-time "$fname"
done
請注意過多使用引號。這是所有必要的。
傳遞所有的參數到另一個程序更簡單:
process-all-together "[email protected]"
棘手的情況是,當你想在半分割的參數。這要求在一個簡單的POSIX shell中有更多的代碼。但也許Bash有一些特殊功能。
0
"$var"
例如,
$ var='foo bar'
$ perl -E'say "<<$_>>" for @ARGV' $var
<<foo>>
<<bar>>
$ perl -E'say "<<$_>>" for @ARGV' "$var"
<<foo bar>>
3
你想"[email protected]"
,其中有擴大[email protected]
但保留空白引用調用者的特殊語法(它不會創建一個巨大的字符串與所有在它的論據)。因此,有人可以調用腳本,如:
bash-script.sh AFile "Another File With Spaces"
然後在你的腳本,你可以做這樣的事情:
for f in "[email protected]"; do
echo "$f";
done
,並得到兩行輸出(而不是5)。
閱讀有關特殊參數段落 「@」 在這裏:http://www.gnu.org/s/bash/manual/bash.html#Special-Parameters
0
布拉沃@Roland。 Thans爲您的解決方案提供了很多幫助
它確實有效!
我寫了一個簡單的腳本函數,用鸚鵡螺打開給定的路徑。
而且我剛剛嵌套函數這個「幫手」 - 用於循環進入主功能:
fmp() {
fmp2() {
nautilus "[email protected]";
};
for fname in "[email protected]";
do
fmp2 "$fname";
done;
}
現在,我能夠讓我所有的腳本做工與路徑處理只需轉動將它們嵌入由函數包裝的嵌套函數中,並使用此輔助程序for循環。
相關問題
- 1. REST如何傳遞空路徑參數?
- 2. 在Matlab bash中傳遞路徑字符串作爲參數
- 3. VBScript傳遞帶空格的路徑中的命令行參數
- 4. 將路徑作爲參數傳遞
- 5. Python:將路徑作爲參數傳遞
- 6. bash傳遞參數/參數?
- 7. 傳遞BASH參數
- 8. 在空格中傳遞一個空格作爲函數參數
- 9. Vue.js - 將參數傳遞給子路徑
- 10. 自動傳遞路徑參數
- 11. C#在參數中傳遞路徑
- 12. 傳遞參數爲空
- 13. Symfony2傳遞參數爲空
- 14. 傳遞參數爲空
- 15. Bash:傳遞函數作爲參數
- 16. 在bash中使用空格傳遞參數
- 17. REST如何在URI中傳遞空路徑參數?
- 18. 如何傳遞一個空格字符串作爲bash中的函數參數
- 19. 從終端/ bash傳遞包含空格和括號給MATLAB的路徑
- 20. 我們可以傳遞一個包含空格的路徑字符串作爲fopen()的參數嗎?
- 21. 將腳本作爲參數傳遞Bash
- 22. 在bash中傳遞參數
- 23. bash:傳遞腳本參數
- 24. RoR上的Rspec;傳遞JSON格式的參數(參數爲空)
- 25. 用bash中的空格傳輸一個路徑
- 26. 在作爲函數標誌傳遞給Bash的MATLAB中設置一個路徑變量中的空格
- 27. 如何將包含一個空格的bash參數作爲Java參數傳遞給空間?
- 28. ksh - 傳遞帶空格的參數
- 29. 傳遞對象作爲路徑幫手的參數
- 30. 在R中傳遞目錄路徑作爲參數
謝謝;如果我需要批量處理它們怎麼辦? – fbrereto
我更新了我的答案。 –
此外,請確保子例程正確地對所有內容進行雙引號,例如'一次處理一個文件(){cp「$ 1」「backupdir/$(basename」$ 1「)」; }' –