【问题标题】:Is there a way to use a variable and transclude it with changing variable in case?有没有办法使用变量并将其转换为以防万一?
【发布时间】:2020-11-26 08:14:04
【问题描述】:
function install(){

V1=version1
V2=version2
DIR=folder

echo "Select version by number to download ${reset}:"
echo "$V1"
echo "$V2"
read version

case $version in

  1) if [[ ! -d $DIR/$V1 ]]; 
        then echo "Creating $DIR/$V1 folder."
            mkdir -p $DIR
        else
            echo "$DIR/$V1 Folder exists"
     fi

  2) if [[ ! -d $DIR/$V2 ]]; 
        then echo "Creating $DIR/$V2 folder."
            mkdir -p $DIR/$V2
        else
            echo "$DIR/$V2 Folder exists"
      fi
}

opt=$1
case $opt in
    --install | -i) install ;;
    *) echo "Exit"
       exit ;;
esac

现在case $version 中唯一改变的是变量$V[1-2]

我如何阅读模板并将其放入其中?

我试过了:

lines=('if [[ ! -d $DIR/$V0 ]]; 
        then echo "Creating $DIR/$V0 folder."
            mkdir -p $DIR
        else
            echo "$DIR/$V0 Folder exists"
     fi')

然后

1) $(lines | sed -e "s/\&V0/\$V1/g")

但这没有用。有任何想法吗?任何帮助表示赞赏!谢谢!

编辑:很抱歉,但在阅读了答案后,我很遗憾我不够清楚。我要求的主要部分是:

  1. 我有一条带有“if then else”条件的文本
  2. 那个应该作为模板放在某个地方。
  3. 然后应该读取这个模板并且应该用正确的变量交换变量。
  4. 这样我只有一个脚本,只需通过 sed 将其放入“案例”中,只需稍加修改即可重复使用。

这可能吗?

【问题讨论】:

  • “transclude”是什么意思?
  • 对不起,我真的尽力让它尽可能小。
  • @Bramar 和 Shawn 谢谢!但我最好创建一个更具体的新帖子。这里最好的行为是什么?我应该删除这个还是应该保留它?

标签: bash


【解决方案1】:

$V1$V2 分配给另一个变量,并在公共代码中使用它

case $version in
    1) v=$V1 ;;
    2) v=$V2 ;;
    *) echo "Invalid version"; exit ;;
esac

if [[ ! -d "$DIR/$v" ]]; 
then 
    echo "Creating $DIR/$v folder."
    mkdir -p "$DIR/$v"
else
    echo "$DIR/$v Folder exists"
fi

【讨论】:

    【解决方案2】:

    使用内置的select 生成提示和可用选项菜单:

    #!/usr/bin/env bash
    
    declare -a versions=(version1 version2)
    dir=folder
    
    PS3="Select version by number to download: "
    select version in "${versions[@]}"; do
        if [[ -z $version ]]; then
            echo "Invalid version!"
        elif [[ ! -d $dir/$version ]]; then
            echo "Creating $dir/$version folder"
            mkdir "$dir/$version"
            break
        else
            echo "$dir/$version already exists."
            break
        fi
    done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-23
      • 2014-04-17
      • 2017-12-21
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      相关资源
      最近更新 更多