将变量的值传递给bash脚本中的命令

问题描述:

如何将变量的值传递给bash脚本中的命令?将变量的值传递给bash脚本中的命令

具体而言,我想创建一个带有(部分)随机名称的AWS S3存储桶。这是我走到这一步:

#!/bin/bash 
random_id=$(cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 8 | head -n 1) 
bucket_name=s3://mybucket-$random_id 
echo Bucket name: ${bucket_name} 
aws s3 mb ${bucket_name} 

输出我得到:

Bucket name: s3://mybucket-z4nnli2k 
Parameter validation failed:cket-z4nnli2k 
": Bucket name must match the regex "^[a-zA-Z0-9.\-_]{1,255}$" 

桶名称正确生成,但aws s3 mb ${bucket_name}失败。如果我只是运行aws s3 mb s3://mybucket-z4nnli2k则会创建桶,因此我假设aws s3 mb ${bucket_name}不是将bucket_name的值传递给aws s3 mb命令的正确方法。

它必须是明显的东西,但我几乎没有shell脚本的经验,并且无法弄清楚。

如何将bucket_name的值传递给aws s3 mb命令?

+1

确定存储桶名称是否正确?你的包含一个':',它表示它必须匹配的正则表达式不包含冒号或正斜杠。除此之外,你应该几乎总是引用你的变量 –

+0

这个[GitHub问题](https://github.com/boto/botocore/issues/680)可能是有用的 – Inian

+4

你有额外的CR,LF和一个空格存储桶名称。 –

由于上述评论,这是我的工作是什么:

#!/bin/bash 
random_id=$(cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 8 | head -n 1) 
bucket_name=s3://mybucket-$random_id 
echo Bucket name: ${bucket_name} 
aws s3 mb "${bucket_name}" 

我也不得不对脚本运行dos2unix,显然有坏换行符。

+0

你写'echo'的方式,你看不到bucket_name是否有尾随空格。将其写为'echo“存储桶名称:'$ bucket_name'”' – user1934428