【问题标题】:using cat command with variable unix使用带有变量 unix 的 cat 命令
【发布时间】:2015-08-25 22:38:14
【问题描述】:
sh temp1.sh Gold.txt Silver.txt
2
Gold.txt
$2

白银仅次于黄金。 这是比赛中的独特位置。

cat: cannot open $2

tstetlx () /appl/edw/apps/scripts/scenario1> vi temp1.sh
i=$#
echo $i
echo $1
echo $`echo $i`
#cat "$`echo $i`"
cat $2
cat "\$$i"

以下命令不打印作为参数传递给文件的第二个文件的内容。

cat "\$$i"

【问题讨论】:

    标签: unix cat


    【解决方案1】:

    我不清楚你想做什么。考虑使用$1$2

    该行失败的原因是因为 cat 的参数实际上是 $2 - shell 没有尝试将 $2 替换为变量。

    这是处理问题的一种方法。请注意,这是一个 bash 解决方案。

    i=$#
    echo $i
    echo $1
    echo $`echo $i`
    #cat "$`echo $i`"
    cat $2
    cat "\$$i"
    declare -a arr=( "$0" $@ )
    echo  ${arr[i]}
    cat ${arr[i]}
    

    【讨论】:

      【解决方案2】:

      确保名为 Silver.txt 的文件与 temp1.sh 位于同一目录中。

      至于你试图用cat "\$$i"做的变量间接,你想要eval

      eval cat "\$$i"
      

      但是,eval 可能很危险。确保您将要评估的变量是有效的,尤其是当它的内容来自用户输入时。运行它,看看我的意思:

      eval cat "\$$i;ps -ef"
      

      如果它可以被操纵以包含一个命令,它将运行一个命令。有关原因和替代方案的更好讨论,请参阅此帖子:Why should eval be avoided in Bash, and what should I use instead?

      【讨论】:

        猜你喜欢
        • 2023-03-30
        • 2013-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-07
        • 2017-02-09
        相关资源
        最近更新 更多