Bashスクリプトmkdirまたはcpで混合変数/文字列リテラルパラメータを使用する方法は?

Bashスクリプトmkdirまたはcpで混合変数/文字列リテラルパラメータを使用する方法は?

Minecraftワールドを自動的にリセットし、いくつかのカスタム機能を再コピーしようとしています...リセットは、単にワールドフォルダを削除することを意味します。カスタム関数を正しい場所にコピーすると、世界が再生成されたかどうかにかかわらず動作するはずです。

スクリプト全体は次のようになりますが、失敗した部分は次のようになります。

mkdir "-p $world/datapacks"
cp "-R /srv/datapacks_dev/rolla $world/datapacks"

どちらの行も同様のメッセージをトリガします。

mkdir: invalid option -- ' '
Try 'mkdir --help' for more information.

ところで、引用した部分をそのまま反映してみると合うようです。

#!/bin/bash
if [ -d "/srv/$1/world" ]
then
  read -r -p "Are you sure? [y/N] " response
  if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]]
  then
    world="/srv/$1/world"
    world_nether="/srv/$1/world_nether"
    world_the_end="/srv/$1/world_the_end"
    docker container stop $1
    rm -r $world
    rm -r $world_nether
    rm -r $world_the_end
    mkdir "-p $world/datapacks"
    cp "-R /srv/datapacks_dev/rolla $world/datapacks"
    docker container start $1
    exit 0
  else
    exit 1
  fi
else
  echo "Copy failed. /srv/$1/world doesn't exist."
  exit 1
fi

私はこれが一般的なことだと思う何十もの記事を読んでいますが、まだ答えが見つかりませんでした...どうすればいいですか?

ベストアンサー1

シェルは、引用された引数をオプションと引数ではなく単一の文字列として解釈します。オプションを引用しないで、各パラメータを個別に引用してください。

失敗します:

mkdir "-p $world/datapacks"
cp "-R /srv/datapacks_dev/rolla $world/datapacks"

失敗しません:

mkdir -p "$world/datapacks"
cp -R "/srv/datapacks_dev/rolla" "$world/datapacks"

おすすめ記事