在Bash中的if循环中设置变量

在Bash中的if循环中设置变量,bash,Bash,有没有办法在bash中引用变量?去掉{} animal_name="" if [[ -z "${!animal_name// }" ]]; then animal_name="doggo" fi echo sudo chmod ...... ${!animal_name} 抛弃{} animal_name="" if [[ -z "${!animal_name//

有没有办法在bash中引用变量?

去掉{}

  animal_name=""

  if [[ -z "${!animal_name// }" ]]; then
   animal_name="doggo"
  fi
    
 echo sudo chmod ...... ${!animal_name}
抛弃{}

  animal_name=""

  if [[ -z "${!animal_name// }" ]]; then
   animal_name="doggo"
  fi
    
 echo sudo chmod ...... ${!animal_name}

我认为你的错误在第3行或第2行,这取决于你如何看待它

动物名= 如果[[-z${!animal_name/}]];然后出现错误:未找到事件:动物名称// 动物名称=狗狗 fi echo sudo chmod$动物名
我找到的修复方法是删除${!animal_name/}中的两个斜杠,这对我来说很有效。

我认为您的错误在第3行或第2行,具体取决于您如何看待它

动物名= 如果[[-z${!animal_name/}]];然后出现错误:未找到事件:动物名称// 动物名称=狗狗 fi echo sudo chmod$动物名
我找到的修复方法是删除${!animal_name/}中的两个斜杠,这对我很有效。

如果您只是想确保变量有一些值,可以使用默认值

animal_name=""
if [[ -z "$animal_name" ]]; then
    animal_name="doggo"
fi

sudo chmod {flag} $animal_name
这将使用doggo is animal_name为空,但将保留为空

echo sudo chmod ...... ${animal_name:-doggo}
如果您希望animal_name在此后始终默认为doggo,请使用=而不是-并且如果它为空,它也将分配它

$: animal_name=
$: echo sudo chmod ...... ${animal_name:-doggo}
sudo chmod ...... doggo
$: echo "[$animal_name]" # still empty
[]
$: animal_name=bob
$: echo sudo chmod ...... ${animal_name:-doggo} # doesn't change is already set
sudo chmod ...... bob
因此:


如果您只是想确保变量有一些值,那么可以使用默认值

animal_name=""
if [[ -z "$animal_name" ]]; then
    animal_name="doggo"
fi

sudo chmod {flag} $animal_name
这将使用doggo is animal_name为空,但将保留为空

echo sudo chmod ...... ${animal_name:-doggo}
如果您希望animal_name在此后始终默认为doggo,请使用=而不是-并且如果它为空,它也将分配它

$: animal_name=
$: echo sudo chmod ...... ${animal_name:-doggo}
sudo chmod ...... doggo
$: echo "[$animal_name]" # still empty
[]
$: animal_name=bob
$: echo sudo chmod ...... ${animal_name:-doggo} # doesn't change is already set
sudo chmod ...... bob
因此:

也许你是说间接的?也许会有帮助

动物名= 我是狗狗! 如果[[-z${animal_name}]];然后 动物名称=狗狗 fi echo sudo chmod${!动物名称} ${!animal_name}引用doggo的值,因此输出为:

$: animal_name=
$: echo sudo chmod ...... ${animal_name:=doggo}
sudo chmod ...... doggo
$: echo "[$animal_name]" # this time it was set
[doggo]
$: animal_name=bob
$: echo sudo chmod ...... ${animal_name:=doggo} # doesn't change if already set
sudo chmod ...... bob
也许你是说间接的?也许会有帮助

动物名= 我是狗狗! 如果[[-z${animal_name}]];然后 动物名称=狗狗 fi echo sudo chmod${!动物名称} ${!animal_name}引用doggo的值,因此输出为:

$: animal_name=
$: echo sudo chmod ...... ${animal_name:=doggo}
sudo chmod ...... doggo
$: echo "[$animal_name]" # this time it was set
[doggo]
$: animal_name=bob
$: echo sudo chmod ...... ${animal_name:=doggo} # doesn't change if already set
sudo chmod ...... bob

描述你想要做什么以及想要的输出是什么。@Cyrus如果变量不存在,我就是要设置为doggo的动物名称。但是,如果变量为空,当我尝试设置默认内容时,它总是为空:echo${animal_name:=doggo}描述您想要做什么以及所需的输出是什么。@Cyrus如果变量不存在,我就是要设置为doggo的animal_name。但是,如果变量为空,当我尝试设置默认内容时,它总是为空:echo${animal_name:=doggo}抱歉,我做了一次编辑。我在回声中有更多的事情发生。我还能用这个吗?当然可以我将编辑答案以显示您的用例一个问题-为什么要使用echo?您是要执行chmod还是打印整个chmod{flag}$animal_name?抱歉,进行了编辑。我在回声中有更多的事情发生。我还能用这个吗?当然可以我将编辑答案以显示您的用例一个问题-为什么要使用echo?您正在尝试执行chmod还是打印整个chmod{flag}$animal_name?编辑以包含chmod。。。。。。。你能提供更多的背景资料吗?比如你有一个名为doggo的文件/可执行文件吗?sudo chmod的目的是什么。。。。。。{!animal_name}?哦,我想我把这个和javascript搞混了。。。你知道当我包含{!}时{!animal_name}是什么意思吗?编辑以包含chmod。。。。。。。你能提供更多的背景资料吗?比如你有一个名为doggo的文件/可执行文件吗?sudo chmod的目的是什么。。。。。。{!animal_name}?哦,我想我把这个和javascript搞混了。。。你知道当我加入{!}时{!动物名称}是什么意思吗?见鬼,这是赛勒斯昨天在评论中给出的答案,哈哈……见鬼,这是赛勒斯昨天在评论中给出的答案,哈哈。。。