iT邦幫忙

0

如何在shell script中執行帶有$的command?

  • 分享至 

  • xImage

我想用script執行以下兩個command

docker rm $(docker ps -aqf status=exited)
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)

有試過用反斜線,但沒用

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
Ray
iT邦大神 1 級 ‧ 2023-02-05 21:44:43
docker rm `docker ps -aqf status=exited`
docker rmi `docker images --filter "dangling=true" -q --no-trunc`
2
jeffeux
iT邦新手 4 級 ‧ 2023-02-06 04:15:54

不太懂你想問的問題,但在 bash 中 `...`$(...) 就是會把 backtick(反引號/重音符) `(注意不是反斜線(backslash) \!) 或 $ 開頭圓括號內的指令執行完後的輸出放到原來的位置

也就是說原本的 script 可以等同於

# 把 `docker ps -aqf status=exited` 輸出的東西存到 `container_name`
container_name=$(docker ps -aqf status=exited)
# 然後移除 container
docker rm ${container_name}
# 這邊就是直接把 image 的名字放到原本的位置
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)

舉例如果今天

docker ps -aqf status=exited

的輸出是

abcdefg

docker rm $(docker ps -aqf status=exited)

docker rm `docker ps -aqf status=exited`

的結果就等於

docker rm abcdefg
#         ^^^^^^^ 換成結果了!

之所以鼓勵用 $(...) 而非 `...` 的理由是前者可以形成巢狀結構,例如

echo $(echo $(date) | rev)

但是 `...` 不行(會造成語句錯誤)只能一行一行分開寫

DATE=`date`
REV_DATE=`echo $DATE | rev`
echo ${REV_DATE}

`...` 的向後相容性比較好,也就是在舊的 shell 裡面仍可以運作

不知道是不是您想要問的?

我要發表回答

立即登入回答