【问题标题】:Parsing a variable in BASH without modifying the variable [duplicate]在不修改变量的情况下解析 BASH 中的变量 [重复]
【发布时间】:2022-11-03 23:44:58
【问题描述】:

我有一个接受路径作为输入的脚本。然后它使用 IFS 解析路径的组件,将它们存储在一个数组中。这很好用。

但它也修改了变量!似乎没有什么办法可以避免。它甚至会修改变量的任何副本。我需要保留原始变量的副本而不进行任何修改,但它不会这样做。

示例脚本:

#!/bin/bash

dir=$1
copy_of_dir=$dir

echo 'directory =' $dir
echo 'copy of directory =' $copy_of_dir

IFS='/'
read -a array <<< $dir;

echo ${array[1]}
echo ${array[2]}

echo 'directory =' $dir
echo 'copy of directory =' $copy_of_dir

运行它会产生:

$ ./myscript.sh /home/myself
directory = /home/myself
copy of directory = /home/myself
home
myself
directory =  home myself
copy of directory =  home myself
$

哎呀。这里有一些基本的东西我不明白。

【问题讨论】:

  • echo $anything 本身就是不安全的。总是,总是echo "$anything"
  • 顺便说一句,这是shellcheck.net 会为您标记的内容,而无需人工审核。
  • 顺便说一句:不是read 改变了你的变量;是 IFS=/ 改变了后续不带引号的扩展解析变量的方式。如果您将IFS=/ read -a array &lt;&lt;&lt;"$dir" 全部放在一行中,并且在赋值和read 之间没有命令分隔符,则不会发生这种情况,因为对IFS 的更改将仅限于read 的单独调用。

标签: bash parsing variable-assignment ifs


【解决方案1】:

尝试将copy_of_dir=$dir 设置为copy_of_dir=$1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-24
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    相关资源
    最近更新 更多