在bash中使用扩展连接变量
我正在尝试使用bash脚本的expansion变量属性简化在bash中使用扩展连接变量,bash,shell,variables,Bash,Shell,Variables,我正在尝试使用bash脚本的expansion变量属性简化gcc的编译行 假设我定义了一个包含源文件文件夹的变量SRC=SRC/,以及一个额外的变量C_SOURCES=(source1.C source2.C…对源文件本身进行计数 如果我编写类似于“${SRC}${C_SOURCES[@]}”,结果是只有C_SOURCES变量中的第一个值获得SRC中的值,因此:SRC/source1.C source2.C…。这不是我所期望的 我应该如何用变量扩展重写该行,以便C\u SOURCESvariab
gcc
的编译行
假设我定义了一个包含源文件文件夹的变量SRC=SRC/
,以及一个额外的变量C_SOURCES=(source1.C source2.C…
对源文件本身进行计数
如果我编写类似于“${SRC}${C_SOURCES[@]}”
,结果是只有C_SOURCES
变量中的第一个值获得SRC
中的值,因此:SRC/source1.C source2.C…
。这不是我所期望的
我应该如何用变量扩展重写该行,以便C\u SOURCES
variable中的所有值都获得SRC
variable中的值 试试这个:
PATHS=($(for x in ${C_SOURCES[@]}; do echo "$SRC/$x"; done))
我选择包含/
只是为了确定。这将无法正确处理带有空格的文件名或路径。请尝试以下操作:
PATHS=($(for x in ${C_SOURCES[@]}; do echo "$SRC/$x"; done))
我选择包含/
只是为了确定。这将无法正确处理带有空格的文件名或路径。您可以使用printf
C_SOURCES=('source1.c' 'source 2.c' 'source3.c' )
SRC='src/'
printf "'$SRC%s' " "${C_SOURCES[@]}"
输出
'src/source1.c' 'src/source 2.c' 'src/source3.c'
您可以使用printf
C_SOURCES=('source1.c' 'source 2.c' 'source3.c' )
SRC='src/'
printf "'$SRC%s' " "${C_SOURCES[@]}"
输出
'src/source1.c' 'src/source 2.c' 'src/source3.c'
不知道是否是打字错误,但是
source 2.c
将是数组中的两个不同元素,除非您引用it@SaintHax数组是一个变量。不知道它是否是一个输入错误,但是source 2.c
将是数组中的两个不同元素,除非您引用it@SaintHax数组是一个变量。它在gcc
指令中似乎不起作用,因为在for
循环中使用echo
会在“$SRC/$x”
末尾引入换行符。但是谢谢您的建议。在gcc
指令中,它似乎不起作用,因为在for
循环中使用echo
会在“$SRC/$x”
末尾引入换行符。但是谢谢你的建议。事实上,如果我删除$SRC%s
术语周围的单引号,这对我很有效。多谢各位@EuGENE不知道您想使用最终产品做什么,所以是的,调整它以符合您的目的:)事实上,如果我删除$SRC%s
术语周围的单引号,它对我有效。多谢各位@EuGENE不知道你想用最终产品做什么,所以是的,调整它以符合你的目的:)