Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash命令扩展_Bash_Shell_Variable Expansion - Fatal编程技术网

bash命令扩展

bash命令扩展,bash,shell,variable-expansion,Bash,Shell,Variable Expansion,下面的bash命令替换并不像我所想的那样有效 echo $TMUX_$(echo 1) 仅打印1,我需要变量$TMUX\u 1的值。我还尝试了: echo ${TMUX_$(echo 1)} -bash: ${TMUXPWD_$(echo 1)}: bad substitution 有什么建议吗?您正在寻找阵列吗?Bash拥有它们。在bash中创建和使用数组有多种方法,强烈建议使用bash手册中有关数组的部分。下面是一个代码示例: TMUX=( "zero", "one", "two" )

下面的bash命令替换并不像我所想的那样有效

echo $TMUX_$(echo 1)
仅打印1,我需要变量
$TMUX\u 1
的值。我还尝试了:

echo ${TMUX_$(echo 1)}
-bash: ${TMUXPWD_$(echo 1)}: bad substitution

有什么建议吗?

您正在寻找阵列吗?Bash拥有它们。在bash中创建和使用数组有多种方法,强烈建议使用bash手册中有关数组的部分。下面是一个代码示例:

TMUX=( "zero", "one", "two" )
echo ${TMUX[2]}
当然,这种情况的结果是两个

下面是bash手册页中的几行短文:

   Bash provides one-dimensional indexed and associative array variables.  Any variable may be
   used  as  an indexed array; the declare builtin will explicitly declare an array.  There is
   no maximum limit on the size of an array, nor any requirement that members  be  indexed  or
   assigned  contiguously.  Indexed arrays are referenced using integers (including arithmetic
   expressions)  and  are  zero-based;  associative  arrays  are  referenced  using  arbitrary
   strings.

   An  indexed  array is created automatically if any variable is assigned to using the syntax
   name[subscript]=value.  The subscript is treated as  an  arithmetic  expression  that  must
   evaluate  to  a  number  greater  than  or equal to zero.  To explicitly declare an indexed
   array, use declare -a name (see SHELL BUILTIN COMMANDS below).  declare -a  name[subscript]
   is also accepted; the subscript is ignored.
这项工作(已测试):


不过可能不是很清楚。可以肯定的是,任何解决方案都需要在echo周围打勾才能使其正常工作。

如果我正确理解了您要查找的内容,那么您将尝试以编程方式构造一个变量名,然后访问该变量的值。执行此类操作通常需要
eval
语句:

eval "echo \$TMUX_$(echo 1)"
此语句的重要功能包括使用双引号,以便将
$()
正确地解释为命令替换,并转义第一个
$
,以便不会在第一次执行时对其求值。实现同样目标的另一种方法是

eval 'echo $TMUX_'"$(echo 1)"
在本例中,我使用了两个自动连接的字符串。第一个是单引号,因此在开始时不进行评估

eval
要求有一个例外:Bash有一种间接引用方法,
${!name}
,用于将变量的内容用作变量名。您可以按如下方式使用它:

tmux_var = "TMUX_$(echo 1)"
echo ${!tmux_var}
不过,我不确定是否有一种方法可以在一个语句中实现,因为必须有一个命名变量才能使其工作


另外,我假设echo 1只是一个更复杂命令的替身;-)

我不是在寻找bash数组。我只是想让@yorua007,你想在bash中为tcsh编写这段代码,对吧:[-n“$TMUX”]&&TMUX setenv TMUXPWD_$(TMUX display-p“#I”)$pwdires,我发现问题可能不在这里,但是
$PS1
变量不会更新
TMUXPWD.*
变量。只是用${...找到了解决方案。这将对他的目的起作用;请参阅我关于“复杂命令”的其他注释:)是的,
echo 1
仅用于测试。你的两个建议都有效。实际上,您可以省略eval表达式中的引号。@yorua007:是的,它也可以不使用引号,因为没有空格,所以分词不是问题。我想指出的是使用双引号而不是单引号。
tmux_var = "TMUX_$(echo 1)"
echo ${!tmux_var}