我在使用bash執行某些命令時遇到了問題。比方說,我有一個簡單的bash腳本:在帶有空格參數的bash中執行命令
#!/bin/bash
cmd="sh -c \"ls\""
$cmd
這工作都很好。但是,如果我改變了命令的參數包含空格:
#!/bin/bash
cmd="sh -c \"ls -a\""
$cmd
則拋出-a": 1: -a": Syntax error: Unterminated quoted string
錯誤。看來,bash正確地注意到了開放報價,但它停止在第一空間尋找結束報價。如果我將$cmd
更改爲echo $cmd
,則會按預期返回sh -c "ls -a"
。如果我在終端執行這個命令,一切正常,但是$(./mysh.sh)
失敗,出現同樣的錯誤。
我試過用\
逃脫空間,或用\\\"
(愚蠢的想法,但值得一試)「雙重逃脫」引號。任何人都可以解釋這裏發生了什麼?
http://mywiki.wooledge.org/BashFAQ/050 – user000001