【问题标题】:linux bash build command with strings from csv带有来自csv的字符串的linux bash构建命令
【发布时间】:2026-02-21 06:15:02
【问题描述】:

我对 bash(以及整个 linux)还很陌生。

研究了一整天,以为这是一个我不理解的简单解决方法,但我尝试了上千种不同的方法,但仍然无法使其正常工作……需要一双额外的眼睛和一些建议。

我有一个 csv,其中只有一列托管在 PasswordVault 中托管的属性名称,我需要使用 PasswordVault 客户端查询其密码。

这是一个有效的查询命令:

/opt/CARKaim/sdk/clipasswordsdk GetPassword -p AppDescs.AppID=TEST-APP -p Query="safe=TEST-SAFE;folder=root;object=TEST-SAFE.dev-pwd" -p RequiredProps=Address,UserName -o Password,PassProps.UserName

我在 CSV 中仅使用 2 个值进行测试:

TEST-SAFE.dev-pwd
TEST-SAFE.prd-pwd

当我执行以下操作时:

while IFS="," read f1
do
    echo $f1
    /opt/CARKaim/sdk/clipasswordsdk GetPassword -p AppDescs.AppID=TEST-APP -p Query="safe=TEST-SAFE;folder=root;object=**$f1**" -p RequiredProps=Address,UserName -o Password,PassProps.UserName
done < extractiontest.csv

我得到以下输出:

TEST-SAFE.dev-pwd -p RequiredProps=地址,用户名 -o 密码,PassProps.UserNameT-APP -p 查询=安全=TEST-SAFE;文件夹=根;对象=TEST-SAFE.dev-pwd TEST-SAFE.prd-pwd -p RequiredProps=地址,用户名 -o 密码,PassProps.UserNameT-APP -p Query=safe=TEST-SAFE;folder=root;object=TEST-SAFE.prd-pwd

似乎在变量之后的字符串部分正在覆盖变量之前的字符串部分并一直到它。

我尝试将字符串分隔为多个变量,并尝试将它们一个接一个地连接起来。

我尝试用 XXX 替换字符串,然后这样做:

stri="${originalstring//XXX/${f1}}"
echo $stri

我试过eval

我尝试过单引号和双引号的不同组合

我什至尝试将命令作为 csv 文件中的一行。

不能让它工作...... :(

帮助? :)

非常感谢!

【问题讨论】:

标签: linux bash variables command substitution


【解决方案1】:

您的 CSV 文件似乎在行尾包含“\r”字符。更准确地说,该行以 '\r\n' 结尾,就像在 DOS/Windows 下一样。 在 Bash 中,行尾应该只包含一个 '\n' 字符。 从文件中删除“\r”后,它会很好地工作。对于大文件,您可以使用“dos2unix correct.csv”并将 output.csv 用于您的脚本。

【讨论】:

  • 你无法想象我对此有多么愚蠢! !>(我拿了一个十六进制编辑器,将 0a0d 替换为 0a,一切正常!非常感谢!