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
Ruby 如何在shell脚本的字符串中插入连字符或破折号?_Ruby_Shell_Escaping_Hyphen_Quoting - Fatal编程技术网

Ruby 如何在shell脚本的字符串中插入连字符或破折号?

Ruby 如何在shell脚本的字符串中插入连字符或破折号?,ruby,shell,escaping,hyphen,quoting,Ruby,Shell,Escaping,Hyphen,Quoting,我有以下代码,这意味着要遍历一个gem列表,并使用gem install$gem安装每个gem。但是,当gem名称包含连字符/破折号时,脚本会将连字符两侧的单词视为两个单独的列表项。如何正确地转义连字符,使列表将其视为一项 # Install gems for all installed versions of ruby source /usr/local/share/chruby/chruby.sh gems=( "bundler" "homesick" "mechanize" "vagr

我有以下代码,这意味着要遍历一个gem列表,并使用
gem install$gem
安装每个gem。但是,当gem名称包含连字符/破折号时,脚本会将连字符两侧的单词视为两个单独的列表项。如何正确地转义连字符,使列表将其视为一项

# Install gems for all installed versions of ruby

source /usr/local/share/chruby/chruby.sh

gems=(
"bundler"
"homesick"
"mechanize"
"vagrant"
"gist"
"pry"
"awesome_print"
"overcommit"
"rubocop"
"jshint"
"gem-release"
"aws"
"librarian-chef"
"knife-solo"
)

rubies=`chruby`
for ruby in ${rubies[@]}
do
    IN="$ruby"
    set -- "$IN"
    IFS="-"; declare -a Array=($*)
    echo "Installing gems for ${Array[1]}"

    chruby ${Array[1]}
    echo `ruby -v`
    for gem in ${gems[@]}
    do
      echo $gem
      if ! gem list $gem -i > /dev/null 2>&1
      then
        gem install $gem
      fi
    done
done
我所尝试的:

  • \e-
  • -*
  • gem\055name
最后一个示例适用于
echo
,但不适用于
gem安装“$gem”


我能做些什么来实现这一点呢?

您正在将
IFS
设置为
-
数组
声明之前(但不仅仅针对该声明)。这导致了你的问题。所有这些代码都需要重现你的问题吗?那么解决方案就是
OLDIFS=$IFS;如果s='-'<代码>;IFS=$OLDIFS
via