2017-01-03 47 views
0

由於限制了bash shell的不可用性,我使用了sh shell。下面的一段代碼在bash外殼上運行正常,但在sh外殼上運行時會引發錯誤。使用sh腳本時出錯

if [[ -n $(grep -i "${RSA_BACKUP[iter]}: OK" $BACKUP_HASH_TRACK) ]] 

error: /etc/backup_infra.sh: line 79: syntax error: bad substitution

+0

你正在使用的變量的值是多少?如果沒有這些適當的價值,你的投入是不可覈實的,因此不能提供適當的解決方案。 – Inian

+3

你的代碼有兩個元素,它們是bashisms,不能在POSIX shell中工作(假設你的'sh'是POSIX,你還沒有確認)。第一個是'[['。不要使用它,請重新編寫腳本以使用傳統測試。有關您的平臺上可用內容的詳細信息,請參閱「man test」。第二個是你使用數組。 Bash支持數組。 POSIX shell不。如果你需要幫助編碼解決這個問題,你需要在你的問題中提供更好的背景。 – ghoti

+0

@ ghoti:完全同意你的意見。正如你所看到的,OP的帖子是無法證實的,我們不知道他的要求是什麼,他對變量的價值是什麼(我甚至發佈了一條要求提供信息的評論),但對這些信息的最少建議/幫助我可以給推薦使用[我這樣做 – Inian

回答

0

您嘗試運行該腳本需要擊(至少爲版本4.0)。這是因爲它使用

  1. 關聯數組(${RSA_BACKUP[iter]})。
  2. [[ ... ]]而不是[ ... ]

許多炮彈使用[[ ... ]]語法時下,有的像bash,都能夠理解它,即使他們被援引爲sh。然而,dashash炮彈沒有。

但主要問題是關聯數組。你現在面臨的問題是要麼

  1. 完全重寫劇本,以避免這兩個數組和關聯數組,或
  2. bash安裝了此劇本的作者安排。