我目前有一個bash腳本。它看起來像這樣:Bash:將變量傳遞給具有空格的腳本
#!/bin/bash
case "$1" in
sendcommand)
do X with $2
exit
;;
esac
我將如何發送的所有命令this command with spaces
到$ 2無command
作爲$ 3 with
爲$ 4等?有沒有像PHP或Javascript的encodeURI bash?
我目前有一個bash腳本。它看起來像這樣:Bash:將變量傳遞給具有空格的腳本
#!/bin/bash
case "$1" in
sendcommand)
do X with $2
exit
;;
esac
我將如何發送的所有命令this command with spaces
到$ 2無command
作爲$ 3 with
爲$ 4等?有沒有像PHP或Javascript的encodeURI bash?
您也可以打電話給你的腳本在引號第二個參數也
./scriptname sendcommand "command with spaces"
您的腳本應該是這樣的
#!/bin/bash
case "$1" in
sendcommand)
something "$2"
exit
;;
esac
它括在雙引號:
do_X_with "$2"
雙引號保留在可變的內部間距,包括換行,如果他們是在第一位置的值。的確,理解"[email protected]"
和"$*"
的雙引號的用法也很重要,更不用說使用bash
陣列的時候了。
因爲shell在其循環結構中使用do
作爲關鍵字,所以不能輕鬆地使用名爲do
的命令。要調用它,你必須指定一個命令的路徑,例如./do
或$HOME/bin/do
。
但是$ 2是「本」和OP希望它是「這個命令用空格」。
好的。我們需要查看命令行調用和期望的行爲。假設正在執行的腳本被稱爲script
。此外,正在執行的該命令是othercommand
(不能使用command
;這是一個標準命令)。
可能的調用包括:
script sendcommand "this command with spaces"
script sendcommand 'this command with spaces'
script sendcommand this command with spaces
單引號和雙引號調用是在本例中等價的。如果在參數列表中存在要擴展的變量或要調用的命令,它們將不相等。
它可以編寫script
處理所有三種情況:
#!/bin/bash
case "$1" in
sendcommand)
shift
othercommand "$*"
exit
;;
esac
假設調用包圍論點報價。 shift
命令從參數列表中刪除$1
,並將其餘(單個)參數重新編號爲$1
。然後它調用othercommand
,其中一個字符串參數由連接在一起的參數內容組成。如果有多個參數,則內容將由一個「空格」($IFS
的第一個字符)分隔。
假設調用沒有將引數括在引號中。 shift
命令仍然從參數列表中刪除$1
(sendcommand
),然後空格將剩餘的參數分隔爲單個參數。
在所有這三種情況下,othercommand
都會看到一個由"this command with spaces"
組成的參數(當然程序沒有看到雙引號)。
你可以只使用雙引號:
do X with "$2"
但是'$ 2'是「this」,OP希望它是「帶空格的這個命令」。 –
但是'$ 2'是「this」,OP希望它是「帶空格的這個命令」。我認爲「做」是一個佔位符。 –